PHP Tips

PHP ini_set('display_errors', 1) ってなに?

PHPの学習をしていると「ini_set('display_errors', 1)」っていう記述が出てきたのでぐぐってみました。

結論

「エラーを表示する」設定ということでした。1を0にするとエラーを表示しないとのこと。わざとエラーの状態を作って実験をしてみることにしました。

■php.iniの設定は、

display_errors	= On
error_reporting	= E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

の、状態です。

実験1

<?php
    echo test;
?>

文字列をクォーテーションで囲まなかった場合


【ini_set('display_errors', 1)を指定して実行】

Notice: Use of undefined constant test - assumed 'test' in …
test

Noticeのエラーが表示されました。


【ini_set('display_errors', 0)を指定して実行】

test

エラーは表示されません。


【何もせずに実行】

test

php.iniの設定により、Noticeは表示されません。


実験2

<?php
    $text = "http://web-dev.xyz";
    $text = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" target='_blank'>\\0</a>", $text);
    echo $text; 
?>

PHP5.3以降で非推奨になった「ereg_replace」と正規表現を使用したURLのリンク化


【ini_set('display_errors', 1)を指定して実行】

http://web-dev.xyz

あ・・れ・・?
Deprecated: … が表示されると思ったら表示されませんでした。
Noticeは「ini_set('display_errors', 1)」によって表示されますが、Deprecatedはphp.iniによって表示されない…?

試しにphp.iniの設定を

display_errors	= On
error_reporting	= E_ALL & ~E_NOTICE & ~E_STRICT

に変更したところ、

Deprecated: Function ereg_replace() is deprecated in …
http://web-dev.xyz

Deprecatedのエラーが表示されました。Deprecatedは「ini_set('display_errors', 1)」よりphp.iniの設定が優先されるようです。


【ini_set('display_errors', 0)を指定して実行】

http://web-dev.xyz

エラーは表示されません。

こちらもphp.iniの設定を

display_errors	= On
error_reporting	= E_ALL & ~E_NOTICE & ~E_STRICT

に変更してみたところ、

http://web-dev.xyz

エラーは表示されませんでした。今回はphp.iniの設定より「ini_set('display_errors', 0)」が優先されました。


【何もせずに実行】

http://web-dev.xyz

php.iniの設定により、Deprecatedは表示されません。


最後に・・・

E_STRICTのエラーは作るのが面倒なので割愛します。

以上、「ini_set('display_errors', 1)」に関する実験でした。

-PHP, Tips