「Notice: Undefined variable:」と表示されるとき
定義していない変数の値をechoなどで表示しようとすると表示されるエラーメッセージです。たとえば、スクリプトの先頭で「echo $a;」と記述すると表示されます。次のようなコードです。
<?php echo $a;
これは$aという変数を定義していないのに表示しようとしたためです。
ただし、このエラーはスクリプトの動作が止まってしまうほど重大ではないので、とりあえず非表示にすれば解決するケースがほとんどです。
具体的には.htaccessに次のように記述するのが最も簡単です。
php_value error_reporting 0
これにより、.htaccessを配置したディレクトリ(サブディレクトリ含む)以下のPHPスクリプトでNoticeエラーが表示されなくなります。
上記の設定では全てのエラーが非表示になりますが、Noticeエラーのみを非表示にしたい場合は、次の記事を参考にしてください。
【関連記事】Noticeエラーだけを非表示にしたいとき
.htaccessがよくわからないときは、次の記事も参考にしてください。
【関連記事】データが丸見えになっていませんか?
個別のスクリプトだけ対処したい場合は、PHPスクリプトの先頭に「error_reporting(0);」と記述すれば、そのファイルからのエラーメッセージは非表示になります。
<?php error_reporting(0); …略…
エラーメッセージを非表示にするのは「とりあえずの対策」で、抜本的な対策ではないので、注意してください。
抜本的な対策の例としてエラーメッセージを非表示にするだけでなく、処理コードを修正するには、変数をいきなり出力しないで、何らかの値を与えておきます(初期化する)。
<?php // 変数を初期化してから出力する $a = ""; // この行を追加 → 変数値を出力する前に値を与える echo $a; ?>
この例は少し簡単すぎましたが、このエラーメッセージが表示される典型的なケースはif文です。たとえば、次の例では、20時以降は「こんばんは」と表示しています。
<?php // 20時以降は「こんばんは」 if (date("H") >= 20) { $a = "こんばんは"; } echo $a; ?>
問題はなさそうですが、20時より前は$aに値が設定されないため、「echo $a;」の部分でエラーメッセージが表示されます。
この「Notice: Undefined variable:」が表示される場合は、if文などの関係で、ある変数に値が設定されないタイミングがないかどうか調べる必要があります。上の例では、elseを追加して$aに値を設定しておけば問題は起きません。
<?php // 「Notice: Undefined variable:」の問題を解決 // 20時以降は「こんばんは」 if (date("H") >= 20) { $a = "こんばんは"; } else { // 20時より前は「こんにちは」 $a = "こんにちは"; } echo $a; ?>
「Notice: Undefined variable:」大量に表示されて困ったときはひとまず、エラーメッセージを非表示にする方法があります。詳しくは、急に大量のエラーメッセージが表示されたときを参照してください。
定番のエラーメッセージを予習したい方におすすめの本
PHPに入門したばかりの方はエラーメッセージが表示されると混乱するかもしれませんが、入門時に出会うメッセージのパターンは決まっています。先にエラーメッセージのパターンを予習しておきたい方にはこの本をおすすめします(私が書いた本ですが)。よくある定番のエラーや入力間違いなどをクイズ風にまとめてあります。暇なときに読んでみてください。
「PHP「直す力」養成ドリル」について詳しくはこちら