WordPressエラーログの場所や出力方法とプラグイン
WordPressの開発にエラーログは欠かせません。
なぜなら、テンプレートやfunctions.phpを編集する際に、構文ミスを発見しやすくなるからです。
WordPressでエラーログを吐き出させる方法は2種類あり、WordPress本体のデバッグモードとphp.iniの設定によるエラーログです。
今回は、それぞれの方法によるエラーログの特徴や、設定の方法についてわかりやすく解説し、よく発生するエラーの対処法についても紹介します。
WordPressでしっかりエラーに対処しましょう。
WordPressのエラーログとは
WordPressにはエラーを記録するために、ログを出力する機能があります。
ログとはサービスの利用状況、通信、行動などの履歴を記録したもので、中でも、エラーが発生したときに記録されるログをエラーログと呼びます。
WordPressはPHPというプログラミング言語で作られたCMS(コンテンツマネージメントシステム)です。
そのため、WordPressのエラーとはPHPのエラーと同義語で、WordPressのエラーログを出力する方法は、WordPressのデバッグモードのほかにphp.iniを編集する方法もあります。
php.iniとはPHPの全体的な動作や環境を設定するファイルで、php.iniを設定することで、WordPressのエラーを出力することができます。
デバッグモードがオフになっていても、php.iniの設定がオンになっていればそちらが優先されます。
逆に、php.iniがオフになっていても、デバッグモードがオンになっていればエラーログは記録されます。
したがって、WordPressで開発をする場合は、どちらかがオンになっていればよいでしょう。
ただし、デバッグモードはWordPressが制御する範囲のみのエラーを記録しますが、php.iniでは、PHPの制御する範囲すべてのエラーを記録できます。
WordPressのエラーログを記録する3つの方法
WordPressでエラーログを記録する方法は「php.ini」「wp-config.php」の2種類に分かれ、「php.ini」はPHP全体のエラーを記録して表示します。
エラーの出力レベルについても調整できますが、テスト環境なら「E_ALL」(すべてのエラーと警告)の設定でよいでしょう。
一方、WordPressのデバッグモードと呼ばれるwp-config.phpでのエラー出力は、WordPressの制御範囲内に限られます。
デバッグモードでは通常のエラーのほかに、WordPress非推奨の関数に対してもエラーを出力してくれます。
さらに第3の方法としては、PHPファイルにコードを直書きしてエラーを出力する方法もあります。
それぞれのエラー出力方法の特徴やポイントを把握し、適切にエラーログを出力しましょう。
php.ini
php.iniで以下のように設定を追加すると、エラーを記録できます。
ローカル環境でphp.iniの設定を変更した後は、Apacheを再起動させて変更内容を反映させましょう。
- error_reporting = E_ALL
- display_errors = On
- display_startup_errors = On
- //エラーログの作成場所
- error_log = /フルパス/log.txt
error_reportingではエラーの種類を指定、エラーの種類は以下のように分かれています。
- E_ALL:すべてのエラーと警告
- E_ERROR:実行時の致命的なエラー
- E_RECOVERABLE_ERROR:実行時のキャッチ可能な致命的なエラー
- E_WARNING:実行時の警告(致命的ではないエラー)
- E_PARSE:コンパイル時のパース(解析)エラー
- E_NOTICE:実行時の通知(警告や意図的な通知)
- E_STRICT:実行時の通知(コードの相互運用性と上位互換性を最大限に確保するためのPHPからのコード変更提案)
- E_CORE_ERROR:PHPの初期起動時に発生する致命的なエラー
- E_CORE_WARNING:PHPの初期起動時に発生する警告 (致命的ではないエラー)
- E_COMPILE_ERROR:コンパイル時の致命的なエラー
- E_COMPILE_WARNING:コンパイル時の警告 (致命的でないエラー)
- E_USER_ERROR:ユーザーが生成したエラーメッセージ
- E_USER_WARNING:ユーザーが生成した警告メッセージ
- E_USER_NOTICE:ユーザーが生成した通知メッセージ
- E_DEPRECATED:PHPの将来のバージョンで機能しないコードを警告
- E_USER_DEPRECATED:ユーザーが生成した非推奨の警告
wp-config.php
wp-config.phpを設定してエラーログを反映する方法もあります。
この方法はデバッグモードと呼ばれており、WordPressの制御範囲で起こったエラーを記録します。
デバッグモードのメリットは、非推奨の関数もエラーとして出力してくれるところで、これはphp.iniではエラーとして出力してくれないため、WordPress特有の機能となります。
エラーをファイルだけに出力したい場合は、wp-config.phpに以下のコードを追記しましょう。
- define("WP_DEBUG", true ); //WordPressのエラー出力ON/OFF
- define("WP_DEBUG_LOG", "wp-content/debug.log" ); //WordPressのエラー出力先
- ini_set("display_errors", 0); //PHPの画面エラー出力ON/OFF
- ini_set("error_log", "wp-content/debug.log");//PHPのエラー出力先
- ini_set("log_errors", 1); //PHPのログ出力ON/OFF
- ini_set('error_reporting', E_ALL); //最大限出す
画面とファイルの両方にエラーログを出力したい場合は以下です。
- define("WP_DEBUG", true ); //WordPressのエラー出力ON/OFF
- define("WP_DEBUG_LOG", "wp-content/debug.log" ); //WordPressのエラー出力先
- ini_set("display_errors", 1); //PHPの画面エラー出力ON/OFF
- ini_set("error_log", "wp-content/debug.log");//PHPのエラー出力先
- ini_set("log_errors", 1); //PHPのログ出力ON/OFF
- ini_set('error_reporting', E_ALL); //最大限出す
画面にだけエラーログを出力したい場合は、以下のようにしましょう。
- define("WP_DEBUG", true ); //WordPressのエラー出力ON/OFF
- define("WP_DEBUG_LOG", false );//WordPressのエラー出力先
- ini_set("display_errors", 1); //PHPの画面エラー出力ON/OFF
- ini_set("error_log", 0); //PHPのエラー出力先
- ini_set("log_errors", 0); //PHPのログ出力ON/OFF
- ini_set('error_reporting', E_ALL); //最大限出す
PHPファイルに直書き
以下のように対象のファイル先頭に記述することで、ファイル内のエラーを出力できます。
ini_set('display_errors', 1);
error_reporting(E_ALL);
//エラーログの作成場所
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'].'/log.txt');
ini_set()関数はphp.iniの値をプログラム実行時に変更する関数です。
エラーログの出力以外にも、マックスメモリサイズやマックスアップロードサイズの変更が行えます。
この方法は特定のファイルでエラーを検出したい場合に便利かもしれません。
本番でエラー非表示になっており、なおかつ特定のファイルで動作が上手くいかないときなどに使えるでしょう。
WordPressでよく発生するエラーログ
WordPressでよく発生するエラーについて解説します。
Notice: Undefined index
「Notice: Undefined index」エラーは、未定義の配列を使用したときに発生するエラーを指します。
たとえば、以下のような構文では「Notice: Undefined index」エラーが出ます。
echo $_POST["wp"];
解決するには以下のように、配列に値がセットされているかどうか確認するようにしましょう。
if(isset($_POST["wp"]) && !empty($_POST["wp"])){
echo $_POST["wp"];
}
エラーが発生した際、エラーを起こしている行数までPHPは教えてくれますので、その行数のコードをしっかりと確認しましょう。
Parse error: syntax error
「Parse error: syntax error」エラーは代表的なエラーで、PHPで開発していれば見ない日はないほどで、内容は「予期しない構文エラー」という意味です。
基本的にはセミコロンのつけ忘れや、ダブルクォーテーションや波括弧の閉じ忘れなどがほとんどです。
コピー&ペーストする際に「<?php」を入力し忘れて「Parse error: syntax error」エラーになることも珍しくありません。
「Parse error: syntax error」エラーでは行数が表示されますので、まずはその行数に構文ミスがないかチェックしましょう。
Notice: Undefined variable
「Notice: Undefined variable」エラーは、未定義の変数を使用した場合に発生しますが、変数を初期化するとエラーが発生しません。
もしくは、以下のコードのように変数に値があるかどうか確認しましょう。
if(isset($wp)) {
}
「Notice: Undefined variable」エラーはプログラムが止まるほどのエラーではないため、php.iniでは以下のように設定しておいてもよいでしょう。
error_reporting = E_ALL & ~E_NOTICE
Warning: Invalid argument supplied for foreach
「Warning: Invalid argument supplied for foreach」エラーは、foreach文に渡された引数が間違っているときに発生するエラーです。
foreach文は「foreach(配列変数 as 要素を1つ入れる変数)」となっています。
この配列変数がnullだった場合や、配列変数でなかった場合に「Warning: Invalid argument supplied for foreach」エラーが発生します。
WordPressのエラーログ関連のプラグイン
WordPressのエラーログに関連するプラグインを紹介します。
Error Log Viewer
Error Log Viewerは、WordPressの管理画面上からエラーログファイルを検索・閲覧するためのシンプルなユーティリティです。
最新のアクティビティを表示したり、日付でログを選択したり、ログファイル全体を表示したりできます。
WordPressでPHPやテンプレートを編集するなら、エラーログ管理に入れておきたいプラグインのひとつです。
Error Log Monitor
Error Log MonitorはPHPのエラーログを管理画面に表示するため、ダッシュボードウィジェットを追加します。
また、新しくエラーログが発生した場合、メールで通知を受け取ることも可能で、エラーログの場所を自動で検出したり、デバッグモードを有効にしたりできます。
有効インストール数2万を超えており、更新も頻繁に行われている信頼性のあるエラーログプラグインです。
WP Log Viewer
WP Log Viewerは、ウェブサイトのデバッグをストレスなく行えるプラグインです。
クリックでデバッグモードを切り替えたり、エラーフィルタリングしたりと直感的な操作でエラーログを閲覧できます。
WP Log ViewerはWordPressの公式リポジトリでは配布されていないため、WP Log Viewerからダウンロードしてインストールする必要があります。
ZIP形式のプラグインをインストールする場合、管理画面から「プラグイン」→「新規追加」→「プラグインのアップロード」を利用しましょう。
まとめ
今回は、WordPressのエラーログについて解説しました。
WordPressのカスタマイズや開発にはエラーログの取得が必要不可欠です。
WordPressのエラーログには、WordPress本体のデバッグモードと、PHPの機能であるphp.iniで設定するエラーログの2種類があります。
しかしWordPressの開発で使用するなら、非推奨の関数もエラーとして出力してくれる、WordPress本体のデバッグモードがおすすめです。
デバッグモードとphp.iniには、それぞれ特徴やポイントがあるので、それぞれの違いを把握して、適切にエラーログを出力させましょう。
独自ドメインを取得するなら「お名前.com」
「お名前.com」は、国内No.1のドメイン登録サービスです。
独自ドメインと合わせて、WordPressの自動インストールに対応したレンタルサーバーも利用できます。
WordPressや独自ドメインを一度も使ったことのない人でも、スムーズに始められるはず。
「.com / .net」なら【0円~】ご利用できるので、まずは、お好きなドメイン名を検索してみましょう。
まずは検索!ドメインは早い者勝ち