PHP の日付関数で E_WARNING

2014年9月25日 01:49

じつはこの話には後日談がある。同じサーバに設置している他のスクリプトでも strtotime() を使っている箇所があり、そちらでは date_default_timezone_set() が未設定にもかかわらず E_WARNING が発生していないことに気づいた。念のため phpinfo() の date の項を確認するも、date.timezone はちゃんと Asia/Tokyo になっていた。

しばらく悩んだが理由がわかった。E_WARNING が発生したスクリプトと同じディレクトリに php.ini ファイルが置かれており、その記述が不十分だからだった。独自の php.ini ファイルはサーバデフォルトの php.ini を置き換えてしまうため、本来ならデフォルトの設定をコピーして修正するのが定石。が、そのファイルには display_errors = On の1行が書かれているだけだった。筆者自身には覚えがないので、誰かが削除し忘れたのだろう。

ちなみに E_WARNING が発生するスクリプトと同じディレクトリに phpinfo() を記述したファイルを置いてアクセスしてみると、date の項も同様の Warning が表示されていた。

Warning: phpinfo() [function.phpinfo]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in /path/to/info.php on line 1