作業中のサイトに白い画面が表示されたときに、エラーメッセージを確認するにはどうすればよいですか。
これを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);
死の白い画面(完全に空白のページ) 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);
Apacheエラーログを確認してください。Ubuntuでは/var/log/Apache2/error.log
にあります。
tail -f /var/log/Apache2/error.log
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
を使用している場合は、httpd
をphp
に変更します。
または XDebug
PHP拡張機能をインストールして、トレースファイル(xdebug.auto_trace=1
)を生成します。
Drushを使用している場合は、drush-wsコマンドを使用してエラーメッセージを表示できます。
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>';
}
エラーメッセージには、エラーの原因となったファイルとコード行が表示されます。
変数$ update_free_accessの値をFALSEからTRUEに変更し、update.phpファイルを実行しました。それは私の問題を解決しました。