
PHPで開発をすると、原因不明のエラーが発生することがあります。
例えば500 Internal Server Errorなどです。
PHPの中身に問題があるのはわかるのですが、どの部分に問題があるのかわかりません。
しかもテスト環境では動作し、実機サーバーでのみ現象が発生すると、お手上げです。
こういった場合、まずはログを調べるのですが、さくらサーバーの場合はデフォルトではPHPのエラーログを出力しません。
今回はどうやればエラーログが出力されるか調べました。
PHPが原因で500エラーが発生したらまずやること
500 Internal Server Errorの要因は様々です。
文法エラーかもしれないですし、データベースの接続失敗に起因するケースもあります。
なのでまずやることは一つです。
エラーが発生している場所を特定すること
PHPソースのどこかで原因不明のエラーが発生しています。
ならば、エラー発生個所を特定し、原因を探るのが定石です。
場所を特定するのに有効なのが、エラーログです。
どのソースの何行目でエラーが発生したかがわかります。
ところがさくらサーバーでは、標準状態ではエラーログが出力されません。
さくらサーバーでPHPのエラーログを出力する方法
さくらサーバーでは、PHPのエラーログは出力されませんが、PHP.iniファイルに以下の記述をすると、エラーログが出力されるようになります。
display_errors=Off
error_reporting="2047"
log_errors=On
error_log="/home/契約アカウント名/www/phperror.log"
注意点
4行目はログファイルの出力場所を指定します。
必ず実在しているフォルダ名を記述します。
この部分だけ、契約している内容に応じて記述が変わるため注意が必要です。
ログをとったら確認する方法
なにはともあれ、これでログ取得の準備はできたので、500エラー現象を発生させます。
あとは、FTPでエラーログをダウンロードして、ログファイルの中身を確認します。
任意のログ確認は、さくらインターネットの管理画面からできそうでできません。
なのでどろくさくFTPでダウンロードし、メモ帳やエディターで確認します。
修正出来たらPHP.iniのログ出力設定は消しておく
ログはいずれサーバー容量の圧迫、遅延の原因になります。
エラーの調査が終わったら、PHP.iniに記述したログ出力の記述は削除し、エラーログは出力しないようにするのが無難です。
あくまでも調査用のログのため、普段はオフにしておくのが良いです。
エラーはテスト環境でチェックすべきですが例外もあります
今回は、さくらサーバーでエラーログを取得し、問題を解決することができました。
ただ、本来ならばテスト環境でエラーをチェックしておくべきことです。
ですが今回、サーバー設定の違いにより発生する現象でした。
テスト環境では現象が発生しないケースがあるということです。
そんな場合は実機側で調査するしかありません。
そんな場合にも対処できるように備えておくことを今回学びました。