PHPを実行しているとさまざまなエラーメッセージが表示されます。主なものは次の3種類です。
- エラー(Error)
- 警告(Warning)
- 注意(Notice)
これらの違いを簡単に説明します。
エラーは修正が必要な間違いのこと
エラーは文字通りエラー(間違い)なので、修正が必要ということで実行が停止します。たとえば、次のコードは2行目に「;」が抜けているので文法エラーで処理が実行されません。
<?php $fp = fopen("abc.txt", "r") while (!feof($fp)) { $line = fgets($fp); echo $line."<br>"; } ?>
「Parse error」(文法エラー)というエラーメッセージが表示されます。
エラーメッセージで注意したいのは行番号です。この例でも「4行目にエラーがある」と表示されていますが、実際に問題があるのは2行目です。
これは、2行目が完結していないため“責任連鎖”の形で4行目がエラーだと判断されているだけです。特に文法エラーのエラーメッセージは行番号を追いかけすぎると原因がわからなくなるので注意しましょう。
警告は「たぶん修正が必要」な間違いのこと
「警告」(Warning)はエラーのように処理を停止するほど致命的ではないものの、おそらくコードの修正が必要というレベルの間違いです。
次のコードではファイルの内容を表示しようとしていますが、存在しないファイルを開こうとしているので「警告」が表示されます。
<?php echo "開始"; $data = file_get_contents("not_exists.txt"); echo "終了"; ?>
警告(Warning)が表示されますが処理は停止されずに「開始」から「終了」まで表示されています。
「文法エラーのように致命的ではないので処理は停止しないけど、たぶん修正した方が良いから「警告」しておきます。」というくらいの強さのメッセージです。
この例でも、存在しないファイルを開いてしまったというのは無視できない動作のはずです(ファイル名の間違い、ファイルが存在しないときの処理の記述もれなど)。
処理が終わっていて問題なさそうに見えますが、強めのメッセージ「警告」が表示されていた場合はコードを見直して問題点を修正するようにしましょう。
注意は「修正しなくても大丈夫」(?)な間違いのこと
「注意」(Notice)は、その響き通りにあまり「コードを修正しろ!」の強制力がなさそうなメッセージです。定番は次のようなコードです。
<?php echo "開始"; echo $temp; echo "終了"; ?>
3行目でまだ定義もしていない変数$tempを表示しようとしているので「注意」が表示されますが、特別に大問題も発生しておらず処理は最後まで完了します。
定義していない変数をいきなり表示するというのは作法として問題かもしれませんが、この例のように、未定義の変数をいきなり表示しても結果として処理結果が正しく終わることも少なくありません。その意味で「修正しなくても大丈夫かも(?)」という軽いレベルのエラーメッセージということです。
処理が停止しない点で「警告」と似ていますが、「注意」はおおげさに言えば「無視しても大丈夫(かも)」というくらいのメッセージです。
とはいえ、「常に無視して大丈夫!」と胸をはって言えるとは限りません。変数の初期化を忘れていたなど重大なミスも考えられるので、コードの見直しは必要です。
それをふまえて注意(Notice)は「とりあえずNoticeを非表示にしておこう」という方法で対処することがあります。
たとえば、サーバーを変更したら膨大なNoticeが表示された場合です。これまで非表示にしておいたNoticeが移転先のサーバーでは表示される設定になっていて「急に膨大なエラーメッセージが!」とあせることもあります。
そのようなときは、処理内容に問題がないのであればNoticeメッセージを非表示にする方法があります。以下のページも参考にしてください。