Odpowiedzi:
Umieść to na dole settings.php:
error_reporting(-1); // Have PHP complain about absolutely everything
$conf['error_level'] = 2; // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE); // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);
Zasób Biały ekran śmierci (całkowicie pusta strona) na drupal.org przeprowadzi cię przez kolejne etapy, aby zobaczyć komunikat o błędzie, a także typowe problemy, które je powodują.
Błędy „niewidoczne”
Jeśli raportowanie błędów jest wyłączone, może wystąpić błąd krytyczny, ale go nie widać. W witrynie produkcyjnej często raportowanie błędów jest wyłączone. Jeśli tak jest, a PHP natrafi na niemożliwy do naprawienia błąd, nie zostanie wyświetlony ani błąd, ani treść, dlatego otrzymujesz całkowicie pustą stronę.
Możesz w tym celu włączyć raportowanie błędów PHP, aby wyświetlał komunikat na samej stronie, lub sprawdzić pliki dziennika (z serwera), aby wyszukać błąd. Jak to zrobić, wyjaśniono poniżej.
Włącz raportowanie błędów
Chociaż można go wyłączyć na komercyjnych hostach i stronach produkcyjnych (nie bez powodu, aby użytkownicy nie widzieli błędów), błędy te są jednym z najlepszych narzędzi do rozwiązywania problemów. Aby włączyć raportowanie błędów, tymczasowo edytuj plik index.php (zwykle znajdujący się w katalogu głównym) bezpośrednio po pierwszym otwierającym znaczniku PHP (nie edytuj rzeczywistych informacji o pliku!), Aby dodać:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Teraz będziesz mógł zobaczyć wszelkie błędy, które występują bezpośrednio na ekranie. Problemy z pamięcią mogą nadal nie być wyświetlane, ale jest to pierwszy krok w procesie eliminacji.
Jeśli korzystasz z konfiguracji obejmującej wiele witryn i chcesz, aby w jednej witrynie pojawiały się błędy, najpierw sprawdź nazwę hosta jak w:
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); }
Jeśli problem występuje podczas uruchamiania update.php, otwórz update.php w edytorze tekstu i odkomentuj następujący wiersz:
ini_set('display_errors', FALSE);
Zajrzyj do dziennika błędów Apache, w Ubuntu, w którym się znajduje, /var/log/apache2/error.log
dzięki czemu możesz:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Znalazłem prosty sposób na śledzenie błędów WSOD, uruchamiając całą witrynę drush
, np .:
drush rs
Po tym wejdź na stronę pod podanym nowym adresem (np. 127.0.0.1:8080
), A następnie spróbuj odtworzyć problem, a zobaczysz wszystkie błędy na ekranie terminala. Nie musisz ponownie konfigurować swojego PHP, szczególnie w przypadku display_errors
awarii (np. MAMP).
Znalazłem też inny trudny sposób, używając debuggerów, np .:
OS X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
Uwaga: zmień httpd
na, php
jeśli używasz drush rs
jak wyżej.
Lub instalując XDebug
rozszerzenie PHP i wygeneruj plik śledzenia ( xdebug.auto_trace=1
).
Jeśli używasz drush, możesz zobaczyć komunikaty o błędach za pomocą komendy drush-ws.
Właśnie zmieniłem wartość zmiennej $ update_free_access z FALSE na TRUE i wykonałem plik update.php. To rozwiązało mój problem.
Możesz zmodyfikować index.php i zawinąć kod za pomocą try / catch. Lubię to:
try {
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
} catch (Error $t) {
error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
print '<div>Message: ' . $t->getMessage() . '</div>';
print '<div>File:' . $t->getFile() . '</div>';
print '<div>Line:' . $t->getLine() . '</div>';
}
Komunikat o błędzie pokaże plik i wiersz kodu, który spowodował błąd.