Wie kann ich die Fehlermeldungen sehen, wenn ich den weißen Bildschirm des Todes erhalte?

25

Wie kann ich die Fehlermeldungen sehen, wenn die Site, an der ich arbeite, einen weißen Bildschirm erhält?

Sokratis
quelle

Antworten:

33

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);
Mike
quelle
Dies ist großartig für Entwicklungsseiten, obwohl ich /var/log/apache2/error.log für Live-Seiten bevorzuge. Das funktioniert aber. :)
Citricguy
17

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);
iStryker
quelle
10

Schauen Sie sich das Apache-Fehlerprotokoll an, in Ubuntu befindet es sich, /var/log/apache2/error.logdamit Sie Folgendes tun können:

tail -f /var/log/apache2/error.log
tostinni
quelle
2
sudo tail -f /var/log/apache2/error.log
Citricguy
1
wenn Sie viele vhosts mit benutzerdefinierten Protokolldateien für jeden von ihnen haben, benutzen Sie einfach dieses: sudo tail -f /var/log/apache2/*.log aktualisieren Sie die Seite , dass Enden mit WSOD
izus
2

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_errorsFehler 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 httpdzu, phpwenn Sie drush rswie oben beschrieben arbeiten.

Oder installieren Sie die XDebugPHP-Erweiterung und generieren Sie eine Trace-Datei ( xdebug.auto_trace=1).

Kenorb
quelle
1
Sie sind ein Lebensretter. Keiner der veränderten PHP-Einstellungen hat bei mir funktioniert, aber das hat den Trick getan!
Greg Somers
1

Wenn Sie drush verwenden, werden mit dem Befehl drush-ws Fehlermeldungen angezeigt.

Manikandan
quelle
0

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.

Saeed Afzal
quelle
0

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.

Trincer
quelle