【PHP】「date(): It is not safe to rely on the system's timezone settings.」の対処法
先ほどこれまで放置していたサーバーのPHPバージョンを5.2から5.4に変更したところ、これまで問題なく動いていたプログラムで
Warning: date(): 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 the timezone 'UTC' for now, but please set date.timezone to select your timezone.
というエラーが出ました。
今回この対処を行ったのでメモしておきます。
エラーの和訳
英語が得意じゃないのでGoogle翻訳の力を借りて訳したらこんな感じになりました。
警告
date関数:date関数でシステムのタイムゾーン設定に依存することは安全ではない。
あなたはdate.timezone設定やdate_default_timezone_set関数を使う必要がある。
あなたがそれらのいずれかの方法を使用してもなおこの警告が出る場合は、タイムゾーン識別子をスペルミスしている可能性がある。
我々はUTCタイムゾーンを選択したが、あなた自身でタイムゾーンを選択してdate.timezoneを設定してください。
どうやらdate関数に関するエラーのようで、
date関数でシステムのタイムゾーン設定を使ったらダメ!
今回は自動的にUTCタイムゾーンを使ったけど、安全じゃないので自分でタイムゾーンを設定してくれ!
ということらしいです。
PHPのdate設定を確認
どうやらタイムゾーンを設定すればいいらしいのですが、タイムゾーンってデフォルトで設定されてるんじゃないの?と思ったのてphpinfo関数でPHPのdate設定を見てみました。
すると、ここにも先ほどのエラー文が!
対処法
上の画像に「Default timezone」に「UTC」ってあるからデフォルトでタイムゾーンは設定されてるようなんですが、「自分でタイムゾーンを設定してくれ!」と言われたので、試しにphp.iniに
date.timezone = "Asia/Tokyo"
と明示的にタイムゾーンを設定してみました。
すると、先ほどのエラー文が消えて、プログラムも元通り動くようになりました。
今回はdate.timezone設定で対処しましたが、エラー文いわくdate_default_timezone_set関数を使ってもできるっぽいですね。
エラーの考察
ちょっと釈然としないエラー対処でしたが、
date関数でシステムのタイムゾーン設定に依存することは安全ではない
の「安全ではない」はセキュリティうんぬんではなくて、
システムのタイムゾーンに依存したプログラムだと、システムがタイムゾーンを変更したときに意図しない時間処理になるぞ
だから自分で明示的に設定しておきなさい
ということだと思います。
まとめ
システムのタイムゾーンに依存してたらシステムがタイムゾーンを変更したときはやばい。だから自分で明示的にタイムゾーンを設定する必要がある。
対処法はphp.iniに
date.timezone = "Asia/Tokyo"
を記述するか、プログラムコードの中にdate_default_timezone_set関数を使って
date_default_timezone_set('Asia/Tokyo');
と記述すればよい。
あわせて読んでほしい!
コメント
まだコメントはありません。