死の白い画面が表示されたときにエラーメッセージを表示する方法


25

作業中のサイトが白い画面になったときに、エラーメッセージを表示するにはどうすればよいですか?

回答:


33

これを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);

これは開発サイトに最適ですが、ライブサイトには/var/log/apache2/error.logを好みます。これでも動作します。:)
Citricguy

17

drupal.org の死の白い画面(完全に空白のページ)リソースでは、エラーメッセージとそれらを引き起こす一般的な問題を確認するための手順を説明します。

「見えない」エラー

エラー報告がオフになっている場合、致命的なエラーが表示されても表示されない可能性があります。実稼働サイトでは、一般的にエラー報告がオフになっています。その場合、PHPが回復不能なエラーを検出すると、エラーもコンテンツも表示されないため、完全に空白のページになります。

これについてできることは、PHPエラー報告をオンにしてページ自体にメッセージを表示するか、(サーバーからの)ログファイルをチェックしてエラーを探すことです。これらの両方を行う方法を以下に説明します。

エラー報告を有効にする

商用ホストや本番サイトでは無効になっている場合もありますが(理由はユーザーにエラーが表示されないようにするため)、これらのエラーはトラブルシューティングに最適なツールの1つです。エラー報告を有効にするには、最初のPHPタグを開いた直後に(通常はルートディレクトリにある)index.phpファイルを一時的に編集し(実際のファイル情報を編集しないでください!)、以下を追加します。

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

これで、画面で直接発生しているエラーを確認できます。メモリの問題はまだ表示されない場合がありますが、それは消去プロセスの最初のステップです。

マルチサイト設定を使用しており、1つのサイトに対してのみエラーを表示する場合は、次のように最初にホストの名前を確認します。

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

update.phpの実行中に問題が発生した場合は、テキストエディターでupdate.phpを開き、次の行のコメントを解除します。

ini_set('display_errors', FALSE);

10

Apacheのエラーログをご覧ください。Ubuntuでは/var/log/apache2/error.log次のことができます。

tail -f /var/log/apache2/error.log

2
sudo tail -f /var/log/apache2/error.log
Citricguy

1
あなたがそれらのそれぞれのカスタムログファイルと多くのバーチャルホストを持っている場合は、ちょうどこの使用:/var/log/apache2/*.log -f sudoのテールを、その後wsodで終わるというページを更新
izus

2

drushたとえば、次のようにしてサイト全体を実行することで、WSODエラーを簡単に追跡できます。

drush rs

指定された新しいアドレス(例:)でサイトにアクセスした後127.0.0.1:8080、問題の再現を試みると、端末画面にすべてのエラーが表示されます。特にdisplay_errors失敗した場合(MAMPなど)、PHPを再構成する必要はありません。


デバッガを使用して見つけた他のトリッキーな方法、例えば:

  • OS X:

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • Linux:

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    注:上記のように使用httpdしているphp場合は、に変更しますdrush rs

または、XDebugPHP拡張機能をインストールして、トレースファイルを生成します(xdebug.auto_trace=1)。


1
あなたは、命の恩人です。PHPの設定を変更してもナンセンスは機能しませんでしたが、これでうまくいきました!
グレッグサマーズ

1

drushを使用している場合、drush-wsコマンドを使用してエラーメッセージを表示できます。


0

変数$ update_free_accessの値をFALSEからTRUEに変更し、update.phpファイルを実行しました。それは私の問題を解決しました。


0

index.phpを変更し、try / catchでコードをラップできます。このような:

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>';
}

エラーメッセージには、エラーの原因となったファイルとコード行が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.