回答:
これを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タグを開いた直後に(通常はルートディレクトリにある)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);
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
。
または、XDebug
PHP拡張機能をインストールして、トレースファイルを生成します(xdebug.auto_trace=1
)。
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>';
}
エラーメッセージには、エラーの原因となったファイルとコード行が表示されます。