PHPにはデバッグ用の関数などと共に、errorを表示させるための独自の方法があります。errorを表示させることでerrorの原因を特定しやすくなって便利です。
今回はPHPでのerror表示方法やerrorログの出力方法などをご紹介します。
目次
PHPでのerror表示はphp.iniとini_set関数の2種類ある
PHPでerrorを表示させる方法としては、php.iniとini_set関数の2種類が存在しています。php.iniはファイルを開いて中身を直接いじることになります。
それに対してini_set関数はPHPのプログラム内でini_set関数を使って設定します。以下ではphp.iniとini_set関数それぞれでのerror表示設定方法をご紹介します。
php.iniを開いて直接error表示設定する
まずはphp.iniファイルを直接いじる方法をご紹介します。PHP.iniファイルを適当なメモなどで開き、以下の項目をONに変更します。
1 |
display_errors = ON |
この項目がOFFの場合にONに変更して更にWebサーバーを再起動する必要があります。
Webサーバー再起動後以下のようなerrorの出るプログラムを実行してみます。
1 2 3 4 5 6 7 |
$num1 = 100; $num2 = 200; echo '$num1 = '.$num1.' '; echo '$num2 = '.num2.' '; //$付け忘れでerror |
すると以下のようなログが出力されます。
1 2 3 |
$num1 = 100 Notice: Use of undefined constant num2 - assumed 'num2' in /Applications/MAMP/htdocs/error.PHP on line 4 $num2 = num2 |
errorの詳細が表示されており、どこのファイルの何行目がおかしいのかまで教えてくれています。
その下に$num2の実行結果も表示されて、ミスっているのがわかりますね。
ini_set関数を使ってerror表示設定する
php.iniを開いて直接設定する方法だけでなく、PHPのプログラム内からini_set関数を使って設定することもできます。
ini_set関数を以下のように記載してdisplay_errorsを設定します。
1 2 3 4 |
// display_errorsをOFF ini_set('display_errors', 0); // display_errorsをON ini_set('display_errors', 1); |
()内の1つ目の引数を「display_errors」にし、2つ目の引数に0か1を指定することでON・OFFができます。
0だとONになり1だとOFFになります。
PHPのerror表示にはレベルを設定することができる
PHPでのerror表示にはレベルを設定することが可能です。
errorレベルの設定で出力するerrorの種類を指定すれば、errorの整理がしやすくなります。
こちらも設定方法は2種類あり、1つはPHP.iniを直接いじる方法で、もう一つはerror_reporting関数を使って設定する方法です。
ここからは2種類どちらのやり方も詳細にご紹介します。
PHP.iniでerrorレベルを設定する
まずPHP.ini内で設定する場合は、以下の項目を設定します。
1 |
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT |
以下のようなerrorレベル用の定数を使って設定します。
errorレベル定数 | 機能 |
---|---|
E_ALL | PHPでサポートされているエラーと警告全て |
E_ERROR | 実行した際の重大なerror |
E_WARNING | 実行した際の警告(致命的ではないもの) |
E_PARSE | コンパイルした際の解析error |
E_NOTICE | 実行した際の警告(errorが起こる状況だった際のもの) |
E_DEPRECATED | 今後のバージョンでは動作不可なコードに関しての警告 |
E_STRICT | 実行する際の注意 |
&を使って複数設定可能で、定数の前に「~」をつけることで否定をすることができます。
上記サンプルでは最初に「E_ALL」で全てのエラーと警告を設定し、その中から「E_NOTICE」と「E_STRICT」を「~」を付けて設定しています。
なので、実行した際の警告(errorが起こる状況だった際のもの)と実行する際の注意以外のerrorを全て表示するように設定されています。
定数と「&」・「~」を組み合わせてerrorレベルを細かく設定しています。もちろんこちらも設定したあとはWebサーバーを再起動しないと、設定が有効にならないので注意です。
error_reporting関数を使ってもerrorレベル設定が可能
php.ini内でerrorレベルの設定方法を紹介しましたが、PHPプログラム内からerror_reporting関数を使って設定する方法もあります。
PHPプログラム内からerror_reporting関数を使って設定する場合は、Webサーバーの再起動をしなくて済むのが便利です。
書き方としては以下のようになります。
1 |
int error_reporting([ int $レベル ]) |
引数にはphp.iniと同じerrorレベル用定数を指定します。
基本的には以下のような記述になります。
1 2 |
// 全てのエラーを表示する場合はE_ALLを指定 error_reporting(E_ALL); |
上記の記述でerrorの全てを表示できるように設定できます。
errorログの出力はerror_log関数を使って行う
errorはただ表示させるだけでなく、errorログの出力をさせることができます。ファイルなどにerrorログを出力させることで、一度error表示画面を閉じてしまっても再度error内容の確認が可能です。
配列の内容まで表示させることができるので、以下で出力方法をご紹介します。
error_log関数の使い方
errorログの出力にはPHPプログラム内でerror_log関数を使います。error_log関数は以下のような書き方で4つの引数を指定する必要があります。
1 |
error_log( string $エラーメッセージ [, int $メッセージタイプ [, string $送信者 [, string $追加ヘッダ]]]) |
引数でそれぞれ以下のように設定が可能です。
- 第一引数は出力するエラーメッセージ
- 第二引数はメッセージタイプ
- 第三引数はメッセージの送信先
- 第四引数はメッセージタイプが1の場合のみ追加ヘッダを指定可能
第四引数のみ特定の場合指定可能で、基本は第一~第三の引数で設定します。
メッセージタイプは0~4の数字て指定可能で、それぞれ以下のような機能を指定できます。
メッセージタイプ | 機能 |
---|---|
0 | php.ini内「error_log=」で指定したファイルにメッセージ出力 |
1 | 第三引数のアドレスに電子メールで送信 |
2 | 現在は使用できない |
3 | 第三引数指定のファイルにエラーメッセージを追加 |
4 | エラーメッセージをSAPIログ出力ハンドラに送信 |
実際にerror_log関数を使うと以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
//URLを変数に代入 $url = 'https://www.error.jp/custom/'; //URLが存在しているかを確認 if(file_get_contents($url) != FALSE){ //URLが存在しているならURLを表示 echo file_ge_contents($url); }else{ //URLが存在しないならerrorログを出力 error_log($url.'のURLは存在していません。', 0); } |
上記の場合は第二引数に0を指定してphp.iniファイル内「error_log=」で指定したファイルにメッセージを出力しています。
そのため第三引数を指定する必要がなくなります。
指定したファイルに出力させる
前項のようにメッセージタイプ0のphp.iniで指定したファイルへの出力ならば、第三引数で出力先を指定する必要はないです。
メッセージタイプで1(アドレス)または3(ファイル)が指定された場合、第三引数で出力先の指定が可能です。
以下のような感じで出力先の指定ができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
//URLを変数に代入 $url = 'https://www.error.jp/custom/'; //URLが存在しているかを確認 if(file_get_contents($url) != FALSE){ //URLが存在しているならURLを表示 echo file_ge_contents($url); }else{ //URLが存在しないならerrorログを出力 //出力先ファイルのパスを変数に代入 $logfile = '/Users/APP/PHP/log/error.log' error_log($url.'のURLは存在していません。', 3, $logfile); } |
上記を実行すると存在しないURLであるため、指定したerror.logに以下の内容が出力されます。
1 |
https://www.error.jp/custom/のURLは存在していません。 |
メッセージタイプ1の場合は第三引数にアドレスを指定すれば、errorメッセージ内容をメールとして送信してくれます。
配列の内容を出力させることも可能
errorが通常の変数で起こっている場合は、変数の中身が表示できれば問題ないです。これが配列で起こっている場合、配列の中身が見れないとerrorの原因が特定できません。
そういったことがないようにerror_logでは配列の中身が見れるよう、第一引数に配列を指定すれば、中身が表示されます。以下のように第一引数で配列構造になった変数を入れれば、配列の中身まで出力されます。
1 2 3 4 5 6 |
//変数に配列を代入 $syogipiece = [0=>'歩', 1=>'飛車', 2=>'角', 3=>'王']; //出力先ファイルのパスを変数に代入 $logfile = '/Users/APP/PHP/log/error.log' //errorログを出力 error_log($syogipiece, 3, $logfile); |
これを実行すると指定したerror.logファイルに以下のような配列の中身が表示されます。
1 2 3 4 5 6 7 |
Array ( [0] => 歩 [1] => 飛車 [2] => 角 [3] => 王 ) |
これで配列にきちんと指定した中身が入ってるかなどを確認できます。
まとめ
今回はPHPでのerror表示方法やerrorログの出力方法をご紹介しました。error表示に関してはPHP.iniかini_set関数の2種類の方法があります。
errorログ出力はerror_log関数を使うことで、ファイルへの出力や配列の中身を表示させることもできます。errorの表示やerrorログの出力は色々カスタムできますので、必要に応じてやってみてくださいね。