PHP 7.4.16 (cli) (built: Mar 2 2021 10:35:17) ( NTS )
CentOS Linux release 7.9.2009 (Core)
Apache/2.4.6 (CentOS)
getenforce Disabled(SELinux無効)
上記環境でPHPのエラーログが出力されません
「phpinfo()」の結果は
Directive | Local Value | Master Value |
---|---|---|
error_log | /tmp/php.log | /tmp/php.log |
error_reporting | 32767 | 32767 |
32767だと分かりにくいですが、php.ini 上のerror_reportingは以下です(全部出し設定)
error_reporting = E_ALL
apache2handler | |
---|---|
Apache Version | Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.16 |
「/tmp/php.log」に関しては以下のようにパーミッション設定済み
touch /tmp/php.log chown apache:apache /tmp/php.log chmod 600 /tmp/php.log
(chmodは777でも検証済み)
https://qiita.com/bezeklik/items/8aaf024b495a30bc4e89
上記サイトで
chcon -t httpd_log_t /var/log/php_error.log
が必要だと言及されていますが、SELINUXは切っております
念のため
chcon -t httpd_log_t /tmp/php.log
を実行すると
chcon: ラベルが付けられていないファイル `/tmp/php.log' に部分的なコンテキストを適用できません
となります
この状態で、エラーを意図的に作り出すと
error_hoge();
Fatal error: Uncaught Error: Call to undefined function error_hoge() in /var/www/html/error.php:3 Stack trace: #0 {main} thrown in /var/www/html/error.php on line 3
と画面上にエラーは出ますがエラーログに記録されません
そこで今度はエラーログ関数を使って明示的に書き込みをしてみます
error_log("[". date('Y-m-d H:i:s') . "]". "保存に失敗しました。\n", 3, "/tmp/php.log");
すると
Warning: error_log(/tmp/php.log): failed to open stream: Permission denied in /var/www/html/error.php on line 2
パーミッションエラーであることが分かります
ls -la /tmp
-rwxrwxrwx 1 apache apache 92 4月 14 22:11 php.log
意図した状態にパーミッションはなっているっぽい(chmodは777)
もしかしたらWEBサーバのユーザーがapacheという名前ではない??
cat /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
~省略~
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
名前はどう見てもapache
もうお手上げです
なぜログが出力されないのか分かる方お教えいただけると幸いです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/14 14:04
2021/04/14 14:09
2021/04/14 14:09
2021/04/14 14:15