
WordPressをいじっていると、画面が真っ白になったりエラーの原因がつかめず詰まったりすることがあります。そんなときに使えるのがデバッグモードです。
元々の記述とデバッグモードの有効化
wp-config.php には、もともと次の記述があります。
define('WP_DEBUG', false);
false はデバックモードがオフの状態で、これが初期設定です。ここを true にすることでデバックモードがオンになります。
define('WP_DEBUG', true);
有効にすると、PHPのエラーや警告、非推奨の関数の使用などがそのままブラウザ画面に表示されるようになります。開発中は何が起きているかをその場で確認できて便利ですが、公開中のサイトでこの設定のままにしておくと、エラーの内容を誰にでも見せてしまうことになるので注意が必要です。
エラーをログファイルに書き出す
本番環境や、エラー内容を画面に出したくない場合は、エラーをブラウザに表示させず、ログファイルに書き出す設定に変更します。
<?php
define('WP_DEBUG', true);
if (WP_DEBUG) {
define('WP_DEBUG_LOG', true); //エラーをdebug.logファイルに書き出す
define('WP_DEBUG_DISPLAY', false); //エラーをブラウザに表示しない
@ini_set('display_errors', 0); //エラーをブラウザに表示しない
}
?>WP_DEBUG_LOG | wp-contentフォルダ内のdebug.logファイルにエラーの内容が書き込む。 |
WP_DEBUG_DISPLAY | エラーをブラウザ画面に表示させる。 |
@ini_set('display_errors', 0) も define('WP_DEBUG_DISPLAY', false); と同じ意味を持ちます。PHP側の設定としても画面表示を抑制するための記述です。
動作確認時の注意点
エラーが書き込まれないときは、debug.log ファイルのパーミッションを606など書き込み可能な設定にしっます。レンタルサーバーを使用している場合は、サーバー側のパーミッション設定も確認してください。
debug.log ファイルが、作成されないときは空の debug.log ファイルを自分で作成して wp-content フォルダ内にアップロードします。
ログファイルに書き出す設定にすると、エラーの内容がどんどん溜まっていくので、こまめに削除しましょう。溜め続けると膨大なサイズになってしまいます。
ファイルサイズが大きくなるほど、開いたり検索したりする動作が重くなり、目当てのエラーを見つけにくくなります。過去のエラーと最新のエラーが混在して、今直したい問題がログの中に埋もれてしまうのもデメリットです。またレンタルサーバーによってはファイルサイズやディスク容量に上限があり、超過するとサイトの動作に影響することがある点も留意すべき点です。
致命的なエラーのみ書き出す
WP_DEBUGをtrueにすると、非推奨のタグに対する通知まで表示されるので、内容によってはノイズが多いと感じることがあります。そういう場合は、WP_DEBUGをfalse にして、致命的なエラーだけをログファイルに書き出す設定にすることもできます。
define('WP_DEBUG', false); //デバッグモードを無効にする
@ini_set('log_errors','On'); //エラーメッセージをログファイルに書き出す
@ini_set('display_errors','Off'); //エラーをブラウザに表示しない
@ini_set('error_log','/logs/php_error.log'); //ログファイルのパスを指定するerror_log で指定しているパスはサーバー環境によって変わるので、実際のログの保存先に合わせて書き換えてください。
よく見かけるエラーメッセージ
デバッグモードを有効にすると表示される代表的なエラーメッセージと、その発生条件を整理しました。
大きく分けて、処理が止まらないNotice・Warning系と、スクリプトが止まってしまう致命的なエラーです。
Notice・Warning
| エラーメッセージ | 発生条件 |
|---|---|
Notice: Undefined variable: (変数名) … | 定義していない変数を使おうとしたときに発生するエラー |
Notice: "○○○"は非推奨です。代わりに"×××"をお使いください。 | WordPressの非推奨のタグを使っているときに発生するエラー。将来的に使えなくなるタグなので、WordPress公式のFunction Referenceなどで確認して修正したほうがよい |
Warning: Cannot modify header information … | header("Location:~");の前に何か出力してしまったときに発生するエラー。スクリプトに余分な空白文字がある場合や、header()の前にechoを使っている場合などに起こる。php.iniの設定が原因のこともある |
include (ファイル名) : failed to open stream: No such file or directory … | 読み込むファイルやディレクトリが存在しない場合に発生するエラー |
致命的なエラー
処理がそこで止まってしまい、画面が真っ白になったりサイトが表示されなくなったりするエラーです。
| エラーメッセージ | 発生条件 |
|---|---|
Fatal error: Call to undefined function (関数名) … | 定義していない関数を呼び出そうとしたときに発生するエラー |
Fatal error: Cannot redeclare (関数名) … | 同じ名前の関数が複数存在する場合に発生するエラー。プラグイン同士が同じ関数名を利用しようとした場合などに起こる |
Parse error: syntax error, unexpected … | 構文エラー。タグの書き間違いや" "、if文・foreach文などの閉じ忘れ、行末のセミコロン(;)の書き忘れなどで発生するエラー |
WP_DEBUGまわりの設定は、開発中は画面表示でその場で確認し、公開中のサイトではログ出力のみに切り替える、という使い分けが基本になりそう。エラーの内容が読めるようになると原因の見当がつけやすくなるので、覚えておいて損はなさそうです。