web-dev-qa-db-ja.com

死の白い画面が表示されたときにエラーメッセージを確認するにはどうすればよいですか?

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

25
sokratis

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

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

「見えない」エラー

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

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

エラー報告を有効にする

(正当な理由により、ユーザーにエラーが表示されないようにするために)商用ホストや本番サイトではオフになっている場合がありますが、これらのエラーはトラブルシューティングに最適なツールの1つです。エラー報告を有効にするには、最初に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);
17
iStryker

Apacheエラーログを確認してください。Ubuntuでは/var/log/Apache2/error.logにあります。

tail -f /var/log/Apache2/error.log
10
tostinni

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
    

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

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

2
kenorb

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

1
Manikandan

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

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

0
Trincer

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

0
Saeed Afzal