PHP:時間がずれている原因を探して、新たな知識を得る
設定があるとは、今になると納得できますが、最初は全く思っていなかったです。
photo credit: leoplus via photopin cc
明日の午前9時から本番モードに切り替えるプログラムがあります。
既に準備モードで動いているため、プログラムが動いているサーバーの時刻を変更して、動作を確認することはできません。
テストするために設定して、時間があわない現象に遭遇
開発用のパソコンにプログラムをダウンロードして、設定を行い、パソコンの時刻を明日の午前9時過ぎに設定しました。
ダウンロードしたプログラムの動作を確認すると、本番モードではなく、準備モードで動作しています。
デバッグのために調べていくと、プログラム上で取得している時刻が、明日の午前2時過ぎとなっていました。
原因の調査結果と対処の方法
なぜ7時間ずれているのか理由がまったくわかりません。
開発用のパソコンと、サーバーのPHPのバージョンは、開発用パソコンの方が新しいです。
PHPのバージョンのためなのかと思い検索したところ、タイムゾーンが設定されていないと、エラーが表示されると解説されているページがありました。
date関数で”Asia/Tokyo・・”なんかのエラーが出る件:PHP5.1.0以降
エラーが出ているわけではありませんが、タイムゾーンの設定をしたら改善するかもしれないと思い、
date_default_timezone_set('Asia/Tokyo');
をdate()関数の前に追加したところ、正しい時刻を取得できるようになりました。
phpinfo()関数で、サーバーを確認したところ
Default timezone Asia/Tokyo
となっていましたが、開発用のパソコンを確認したところ
Default timezone Europe/Berlin
となっていていました。
環境設定の差異のために起きていた現象でした。
今回学んだこと
時刻を使うプログラムは、環境設定を当てにするのではなく、プログラム内でタイムゾーンを設定しておけば、どのような環境でも期待どおりに動作することがわかりました。