ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:時間がずれている原因を探して、新たな知識を得る

設定があるとは、今になると納得できますが、最初は全く思っていなかったです。

f:id:AJYA:20130410220137j:plain

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

となっていていました。

環境設定の差異のために起きていた現象でした。

 

今回学んだこと

時刻を使うプログラムは、環境設定を当てにするのではなく、プログラム内でタイムゾーンを設定しておけば、どのような環境でも期待どおりに動作することがわかりました。