<?php
error_reporting(E_ALL);
$test = 1
echo $test;
?>
として、;を忘れたときなどに白紙ページが表示され、
何行目でどんなエラーになったのかがまったくわかりません。
プログラムの先頭でerror_reporting(E_ALL);をしても白紙のままです。
php.iniなどの設定を変更すればエラー内容が表示されるのでしょうか?
回避方法を教えて下さい。お願いします。
http://php.s3.to/man/ref.errorfunc.html
エラー処理およびログ記録関数
php.iniのdisplay_errorsがoffになっていませんでしょうか。
エラー関係として、
display_errors = off //offにする事でHTML上にエラーを表示されないようになる
log_errors = off ←onにする事でファイルにログを出力するように設定される
error_log = /var/log/php_error_logs ←ログを保存したい場所を絶対パスで指定する ファイル名まで指定しないといけない
php.ini中の「display_errors」が「Off」になっていると
スクリプト中で「error_reporting(E_ALL);」をしても
エラーが一切表示されなくなるようです。
なので「display_errors=On」にすることでエラーを表示
させることが出来ます。
ちなみに上のスクリプトでは
Parse error: parse error, unexpected T_ECHO in /www/test.php on line 4
という感じでエラーが出ました。
display_errorsなどを使って、エラー出力先を指定してやる必要があります。
display_errorsは最初から有効です。
<IfModule mod_php4.c>
php_flag display_startup_errors on
</IfModule>
として、.htaccessでdisplay_startup_errorsもonにしたのですが、依然白紙のままです。どうしたらよいのでしょうか?
configure時に何も指定しなくてもインストールされるはずですので、試しにphpinfo()で内容を確認してみてはどうでしょうか。
phpinfo()上で、display_errorsがOnになっていなかったりすると、php.iniのパスを間違えている可能性もあります。パスはphpinfo()上で出てきますので確認して下さい。
display_errorsはonで、関数が存在しないなどのエラーはきちんと表示されています。おそらく、スクリプトのコンパイルエラーに対応してないのでしょうか。
loyさんと同じ「関数が存在しないなど」のエラーは表示されるが「;を書き忘れた場合」のエラーは表示されないという状況を再現しようとphp.iniをいじくってみましたところ、
error_reporting = E_ALL & ~E_PARSE
display_errors = On
というphp.iniを用いた時に同じ状況が再現出来ました。
というわけでphpinfo()でerror_reportingがE_ALL(PHP 4.2.3のとき2043)になっているか確認してみて下さい。
ちなみに上記設定のとき、<?php a=1 ?>では白紙(エラー表示なし)、
<?php undefinedfunction(); ?>では「Fatal error: Call to undefined function: undefinedfunction() in /www/test.php on line 2」と出ました。
いろいろありがとうございます。
phpinfoで確認したところ、
local valueがE_ALL、(.htaccessで設定してます)
master valueが81
になっていました。
これではダメってことですよね。どうしたらよいでしょうか。
display_errors=onでしたね、、、