【PHP】「date(): It is not safe to rely on the system's timezone settings.」の対処法

公開日:
更新日:
カテゴリー: PHP

先ほどこれまで放置していたサーバーの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設定を見てみました。

すると、ここにも先ほどのエラー文が!

phpinfo関数でdateを確認

対処法

上の画像に「Default timezone」に「UTC」ってあるからデフォルトでタイムゾーンは設定されてるようなんですが、「自分でタイムゾーンを設定してくれ!」と言われたので、試しにphp.iniに

date.timezone = "Asia/Tokyo"

と明示的にタイムゾーンを設定してみました。

すると、先ほどのエラー文が消えて、プログラムも元通り動くようになりました。

phpinfo関数でdateを確認 その2

今回はdate.timezone設定で対処しましたが、エラー文いわくdate_default_timezone_set関数を使ってもできるっぽいですね。

エラーの考察

ちょっと釈然としないエラー対処でしたが、

date関数でシステムのタイムゾーン設定に依存することは安全ではない

の「安全ではない」はセキュリティうんぬんではなくて、

システムのタイムゾーンに依存したプログラムだと、システムがタイムゾーンを変更したときに意図しない時間処理になるぞ
だから自分で明示的に設定しておきなさい

ということだと思います。

まとめ

システムのタイムゾーンに依存してたらシステムがタイムゾーンを変更したときはやばい。だから自分で明示的にタイムゾーンを設定する必要がある。

対処法はphp.iniに

date.timezone = "Asia/Tokyo"

を記述するか、プログラムコードの中にdate_default_timezone_set関数を使って

date_default_timezone_set('Asia/Tokyo');

と記述すればよい。

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント