明滅するプログラマの思索

WEBエンジニアとして勤務している一介の男が、日々気づいたことをまとめるブログです

コマンドラインでPHPを実行した際の error_log() の挙動

PHPにはerror_log()という関数があります。
error_log() は、エラー時のメッセージを明示的に出力するための関数です。

error_log("エラーが発生しました");

上記のように使用します。
error_log() コール時、WEBサーバ経由でPHPを実行していれば、WEBサーバに設定したエラーログファイルに追記されます。
では、コマンドラインからPHPを実行した場合、error_log() はどこにエラーメッセージを出力するでしょうか。

php.ini に設定されている場合

PHPの設定ファイルphp.iniには、error_logパラメータがあり、そこに出力先のファイルパスを記述しておくことで、出力先を指定することができます。
デフォルトではコメントアウトされているため、使用する場合は編集する必要があるでしょう。
例えば /var/log/php_errors.log にエラー出力を行いたい場合は以下のようにします。

touch /var/log/php_errors.log
chmod 0777 /var/log/php_errors.log

vi /etc/php.ini

;error_log = php_errors.log
↓
error_log = /var/log/php_errors.log
# コメントアウトを外し、/var/log/php_errors.log に追記するよう修正

php.ini に設定していない場合

php.ini では、デフォルトでは error_log パラメータは有効になっていません。
その場合 error_log() は標準エラー出力にエラーメッセージをはきだします。

php -r 'error_log("エラーです!");'
# 「エラーです!」が出力される

php -r 'error_log("エラーです!");' 2>/dev/null
# 標準エラー出力を捨てると、何も表示されない

PHPでcrontabなどで定期実行するような、コマンドラインスクリプトを書く場合は、注意が必要です。