Antworten:
Schreibe dies unten in die 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);
Die Ressource " Weißer Bildschirm des Todes" (vollständig leere Seite) auf drupal.org führt Sie durch die einzelnen Schritte, um die Fehlermeldung sowie häufig auftretende Probleme anzuzeigen.
"Unsichtbare" Fehler
Wenn die Fehlerberichterstattung deaktiviert ist, wird möglicherweise ein schwerwiegender Fehler angezeigt, der jedoch nicht angezeigt wird. In einer Produktionsstätte ist die Fehlerberichterstattung häufig deaktiviert. Wenn dies der Fall ist und PHP auf einen nicht behebbaren Fehler stößt, wird weder ein Fehler noch ein Inhalt angezeigt, sodass Sie eine vollständig leere Seite erhalten.
Was Sie dagegen tun können, ist, entweder die PHP-Fehlerberichterstattung zu aktivieren, damit eine Meldung auf der Seite selbst angezeigt wird, oder Ihre Protokolldateien (vom Server) auf Fehler zu überprüfen. Wie Sie beides machen, erfahren Sie weiter unten.
Aktivieren Sie die Fehlerberichterstattung
Obwohl es auf kommerziellen Hosts und Produktionsstandorten möglicherweise deaktiviert ist (aus gutem Grund, damit die Benutzer die Fehler nicht sehen), sind diese Fehler eines Ihrer besten Tools zur Fehlerbehebung. Um die Fehlerberichterstattung zu aktivieren, bearbeiten Sie vorübergehend Ihre index.php-Datei (normalerweise in Ihrem Stammverzeichnis) direkt nach dem ersten Öffnen des PHP-Tags (bearbeiten Sie nicht die eigentlichen Dateiinformationen!), Um Folgendes hinzuzufügen:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Sie können nun alle auftretenden Fehler direkt auf dem Bildschirm sehen. Speicherprobleme werden möglicherweise immer noch nicht angezeigt, aber es ist der erste Schritt in einem Eliminierungsprozess.
Wenn Sie eine Einrichtung mit mehreren Standorten verwenden und nur Fehler für einen Standort anzeigen möchten, überprüfen Sie zunächst den Namen des Hosts wie in:
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); }
Wenn das Problem bei der Ausführung von update.php auftritt, öffnen Sie update.php in einem Texteditor und kommentieren Sie die folgende Zeile aus:
ini_set('display_errors', FALSE);
Schauen Sie sich das Apache-Fehlerprotokoll an, in Ubuntu befindet es sich, /var/log/apache2/error.log
damit Sie Folgendes tun können:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Ich habe eine einfache Möglichkeit gefunden, die WSOD-Fehler aufzuspüren, indem ich die gesamte Site über Folgendes ausgeführt habe drush
:
drush rs
Rufen Sie anschließend die Site unter der angegebenen neuen Adresse auf (z. B. 127.0.0.1:8080
), und versuchen Sie, das Problem zu reproduzieren. Auf dem Bildschirm des Terminals werden alle Fehler angezeigt. Es ist nicht erforderlich, Ihr PHP neu zu konfigurieren, insbesondere in Fällen, in denen ein display_errors
Fehler auftritt (z. B. MAMP).
Ein anderer kniffliger Weg, den ich mit Hilfe von Debuggern gefunden habe, zB:
OS X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
Hinweis: Wechseln Sie httpd
zu, php
wenn Sie drush rs
wie oben beschrieben arbeiten.
Oder installieren Sie die XDebug
PHP-Erweiterung und generieren Sie eine Trace-Datei ( xdebug.auto_trace=1
).
Wenn Sie drush verwenden, werden mit dem Befehl drush-ws Fehlermeldungen angezeigt.
Ich habe gerade den Wert der Variablen $ update_free_access von FALSE in TRUE geändert und die Datei update.php ausgeführt. Es hat mein Problem gelöst.
Sie können index.php ändern und den Code mit einem try / catch abschließen. So was:
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>';
}
Die Fehlermeldung zeigt die Datei und die Codezeile an, die den Fehler verursacht haben.