TechNote

事務屋のおぼえがき

XAMPPのphpの時計が大幅にずれている場合の対応方法 と 時刻周辺のはなし

半年ほど前にリリースしたWebシステムにタイムスタンプを記録するように機能追加したところ、タイムスタンプの時間が大きくずれていることに気付いた。原因は単純なものだったが、意外に忘れやすい部分なのでメモを残す。

f:id:kojikoji75:20141103152152j:plain
photo credit: amandabhslater via photopin cc




サマリー

1.XAMPPの時計が大幅にずれる現象に遭遇した
2.XAMPPの時計が大幅にずれている場合の対応方法(Windows
3.XAMPPの時計が大幅にずれている場合の対応方法(Mac
4.php.iniのタイムゾーンとコンピュータのシステム時刻との関係
5.php.iniをいじりたくない場合の対応方法
6.まとめ

1.XAMPPの時計が大幅にずれる現象に遭遇した

テーブルに格納されたテストデータのタイムスタンプの値に違和感を覚えたので、以下を表示してみた。

echo date("Y-m-d H-i-s");

ちょうど8時間ずれている(遅れている)。
念のためXAMPPを設置しているサーバのシステム時刻を確認したが問題なし。

ちなみにここでの環境は下記

XAMPP for Windows 1.8.1 (PHP 5.4.7)




2.XAMPPの時計が大幅にずれている場合の対応方法(Windows

php.iniの設定でタイムゾーン的な設定があったようななかったような記憶が蘇り、php.iniを開いてみたところ、そういうのがあった。

[Date]
; Defines the default timezone used by the date functions
; php.net/date.timezone
date.timezone = Europe/Berlin

これを下記に修正。

date.timezone = Asia/Tokyo

修正後にApacheを再起動することで現象は改善。


3.XAMPPの時計が大幅にずれている場合の対応方法(Mac

ちなみにXAMPP for MACだとphp.iniのデフォルトのタイムゾーン設定は下記のようになっていた。

date.timezone = 'UTC'

UTCとは協定世界時のこと。グリニッジ標準時とは微妙に違うことに注意。


4.php.iniのタイムゾーンとコンピュータのシステム時刻との関係

phpによるタイムゾーンの設定などは設けられているものの、これら「タイムゾーン」「日付」「時刻」はコンピュータのシステム時刻からとってきている値である。
例えばWindowsでは以下のようにタイムゾーン、日付・時刻を変更する画面があるが、これと同様に「タイムゾーン」をphpのほうで設定しているだけ。日付・時刻自体はコンピュータのシステム日付をとってきているだけ。


なので、もし「XAMPPのタイムスタンプが微妙にずれてきた」という問題だったら、単純に「XAMPPを設置しているコンピュータのシステム時刻がずれてきた」ということ。
コンピュータのシステム時刻はズレやすいが、そこはシステム管理者でなくても知っとくべき! Windowsサーバ/クライアントの時刻同期設定まとめ - TechNoteあたりを参考に、定期的にNTPサーバと時刻を同期させるようにすることで解決する。



5.php.iniをいじりたくない場合の対応方法

php.iniをいじりたくない場合は下記のようにコード中でタイムゾーンを指定可能。

date_default_timezone_set('Asia/Tokyo');
echo date("Y-m-d H-i-s");




6.まとめ

  • XAMPP for Windowsではデフォルトで"Europe/Berlin"となっている。
  • XAMMPP for macはデフォルトで"UTC"なっている。UTCは協定世界のこと。
  • どちらにしろ日本で使う場合には"Asia/Tokyo"に変更する必要がある。
  • タイムゾーンの設定などはあるものの、最終的にはシステム時刻からとってきている日付時刻に、タイムゾーン分の変更を加えているだけの値である。
  • php.iniをいじりたくない場合は、コード中でもタイムゾーンを指定することはできる


新しいローカル開発環境をつくることはそんなに頻繁にあることではなく、忘れやすいところなので注意が必要。

あわせて読みたい

PHPでMaximum execution time of 60 seconds exceededのエラー - TechNotePHPでMaximum execution time of 60 seconds exceededのエラー - TechNote

Maximum execution time of 60 seconds exceededが出てプログラムが終了する場合はphp.iniにて下記を書き換える。時...

xamppでhtaccessとhtpasswdの設定 - TechNotexamppでhtaccessとhtpasswdの設定 - TechNote

はまりかけたのでメモ。htaccessに下記を記述。AuthUserFileの記述方法に注意。ここで間違ったパス指定をするとブラウザ側でError500がでる。...

xampp環境でMySQLのデータが文字化けしたときの対応 - TechNotexampp環境でMySQLのデータが文字化けしたときの対応 - TechNote

my.iniで下記が追記されているか確認。なければ追記。[mysqld]character_set_server=utf8skip-character-set-...



Xampp

Xampp

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)