Dockerを使って独習PHP第4版の学習をしていたところ、エラーログが出てこず設定に苦戦したので備忘録として残しておきます。
Dockerで環境構築する際は以下の記事が参考になります(自分はphp8.0のimageを使っていますが)。
対処手順
特に指定がない限りコンテナ内に入って実行します。
まずphp.iniのerror_logの出力先が定義されているか確認してください。
php -r 'phpinfo();' | grep log
error_log => no value => no valueなら出力先が定義されていません。php.iniにエラー関係の設定を追記します。
# この辺り記載ないなら追加
error_reporting = "E_ALL"
display_errors = "On"
log_errors = true
error_log = "/var/log/apache2/error_log" # ログ出したい好きな場所
apacheを再起動します。php:8.0-apacheイメージを使っている場合はapachectlではなく、apache2ctlを再起動するようにしてください。自分の環境ではapachectl関係のコマンドで弄っていても反映されなかったです…
apache2ctl restart
“httpd: Could not reliably determine the server’s fully qualified domain name…”というエラーが出る時があります。その時はコンテナ本体をrestartしても大丈夫です。
# コンテナ外で
docker compose restart
phpファイルを作って動作確認します。
vim index.php
<?php
error_log('エラ〜です");
これだけでは/var/log/apache2/error_logにログが出力されませんでした。またdisplay_errorsをonにしているのにも関わらず画面にもエラーが出ないです。
apache側のconfファイルも設定します。
# httpd.conf的なポジションのこれを開く
vim /etc/apache2/apache2.conf
# 追記する
php_value error_reporting 32767
また先ほどの、”httpd: Could not reliably determine the server’s fully qualified domain name”エラーもついでに対処する場合はServerNameに使用中のlocalhost情報を記載しておくと良いです。
ServerName localhost:8100
apacheを再起動します。
apache2ctl restart
画面にもログにも出ました!
# php.iniで指定したパスのログを参照する
tail /var/log/apache2/error_log
[18-Nov-2022 19:57:02 Asia/Tokyo] PHP Parse error: syntax error, unexpected identifier "phpinfo" in /var/www/html/chapter1/index.php on line 17
その他手間取った部分
php:8.0-apacheのイメージのあれこれを記載しておきます。
# コンテナ内、phpそのものの場所
/usr/local/bin/php
# コンテナ内、apache2.conf(httpd.conf)の場所
etc/apache2/apache2.conf
## 再起動(コンテナ内。apachectlだと反映されなかったのでしっかり2を再起動する)
apache2ctl restart
# vimに慣れている人は今だけでもコンテナにvimを入れておくと楽
apt-get update
apt-get install vim