0
0

More than 1 year has passed since last update.

2022-08-16 log_errors を off としているのに、 PHP のエラー出力が行われる

Posted at

log_errors を off としているのに、 PHP のエラー出力が行われる

環境

  • PHP 5.4

発生した事象

PHP で作成したコマンドラインアプリケーションにおいて、「Warning: Division by zero」のゼロ除算エラーが発生した。

このアプリケーションでは、 “log_errors“ の設定を “off“ にすることで、エラー出力がされないことを保証していた。具体的には、 ini_set('log_errors', false); の文をコードに含めていた。

にも関わらず、以下のようにエラーの内容が出力された。

Warning: Division by zero in - on line ...(略)

原因

“log_errors” の設定は “off” であったが “display_errors” の設定が “on” となっており、これによってエラーの内容が標準出力されていた。

# cat a.php
<?php
echo 'start' . PHP_EOL;
var_dump(1 / 0);
echo 'end' . PHP_EOL;

このスクリプトを、 "display_errors" を "on" に設定して実行すると以下のような出力が行われる。

# php -d 'log_errors=off' -d 'display_errors=on' a.php
start

Warning: Division by zero in /root/work/a.php on line 3
bool(false)
end

なお、「Warning ~」の出力は標準出力 (stdout) に出力されている。

# php -d 'log_errors=off' -d 'display_errors=on' a.php 1> /dev/null

“log_errors” についても “on” にしてコードを実行すると、以下のように同じエラーが二つ出力される形となる。

「PHP Warning: ~」が “log_errors” のものであり、「Warning: ~」が “display_errors” のものである。

# php -d 'log_errors=on' -d 'display_errors=on' a.php
start
PHP Warning:  Division by zero in /root/work/a.php on line 3

Warning: Division by zero in /root/work/a.php on line 3
bool(false)
end

なお、「PHP Warning: ~」の “log_errors” の出力は、標準エラー出力に出力されている。

# php -d 'log_errors=on' -d 'display_errors=on' a.php 2> /dev/null
start

Warning: Division by zero in /root/work/a.php on line 3
bool(false)
end

error_log ディレクティブの設定について

"log_errors" で有効化されたエラーがどこに出力されるかは、 "error_log" ディレクティブで設定される。

環境を確認したところ、 “error_log” の設定はされていなかった。

If this directive is not set, errors are sent to the SAPI error logger. For example, it is an error log in Apache or stderr in CLI.

とあった。 “log_errors” を “on” に設定すると標準エラー出力されるのは、コマンドライン実行であり、かつ “log_errors” ディレクティブの設定がされていなかったためであると思われる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0