Notice: Undefined index
配列などで未定義の要素を参照しようとすると出る場合がある。
(インストールされているサーバーの設定で出ない場合もある)
「Notice:」というのは注意喚起程度のメッセージで、動作自体に影響はない。
また、インストールされているレンタルサーバーなど、通常のphpの設定だとエラーとして出力しない。
自身でサーバーを用意した場合は、php.iniの設定を変更することで表示されなくすることはできる。
セキュリティとの兼ね合いが重要になる。
解決策は
1.php.iniを編集する
2.スクリプト側で抑制する
php.iniの編集
php.ini のerror_reporting がDevelopment Valueの E_ALL | E_STRICT」になっているなら、
error_reporting = E_ALL | E_STRICT
↓
error_reporting = E_ALL & ~E_NOTICE
のように書き換えると「Notice: Undefined index」が表示されなくなる。
全てのエラーコードを表示しない場合は、
「error_reporting = 0」
とする
php.iniを書き換えた場合はサーバーの再起動を忘れずに行う。
Default Value: E_ALL & ~E_NOTICE
Development Value: E_ALL | E_STRICT
Production Value: E_ALL & ~E_DEPRECATED
PHPスクリプト側で設定する場合は下記のように表記する
// 全てのエラー出力をオフにする
error_reporting(0);
// 単純な実行時エラーを表示する
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// E_NOTICE を表示させるのもおすすめ(初期化されていない
// 変数、変数名のスペルミスなど…)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// E_NOTICE 以外の全てのエラーを表示する
// これは php.ini で設定されているデフォルト値
error_reporting(E_ALL ^ E_NOTICE);
// 全ての PHP エラーを表示する (Changelog を参照ください)
error_reporting(E_ALL);
// 全ての PHP エラーを表示する
error_reporting(-1);
// error_reporting(E_ALL); と同じ
ini_set(‘error_reporting’, E_ALL);
参考URL: http://jp.php.net/manual/ja/function.error-reporting.php
$_GET $_POST 等で Notice: Undefined index: が出るばあいは、@で抑制する方法もとれる。
ただし、これは@で抑制しているだけである。加工していないから出るわけではない。
$hoge=$_GET['hoge'];
等でNotice: Undefined index: が出る場合、
$hoge=@$_GET['hoge'];
でNotice: Undefined index: は表示されなくなる。
変数などの「Notice: Undefined index:」を消すには、
$hoge = null;
echo $hoge;
もしくは
$hoge = ”;
echo $hoge;
のように事前に定義する。
最終的な処理として開発環境では
「error_reporting = E_ALL | E_STRICT」
を設定し、入力に対してはnullを事前に設定して定義する。
実装サーバーは
「error_reporting = E_ALL & ~E_NOTICE」
を設定し、ある程度一般的な環境に合わせることで汎用性を増す。
・issetを正しく理解する。null値とunsetの違い-PHP変数管理
・phpでNotice Errorの Undefined index等が多発してうざい場合はこれで解決CommentsAdd Star
No related posts.