PHPにて日本時間が取得できない場合はこうしろ!

海外サーバーでPHPを使用していると、取得した時間が9時間過去の時間であることがあります。結構はまったのでメモしておきます。

例えば、実際には23時なのですが、PHPで時間を取得すると14時になっていたりします。

この場合の対処方法をご紹介します。

私の場合は、strftime()を使用していました。

よく紹介されている方法は、以下のいすれかを時間取得前に呼び出しタイムゾーンを変更するというものでした。が全く効果ありません。


date_default_timezone_set(‘Asia/Tokyo’);
putenv("TZ=JST-9");

次にロケールを確認してみました。

# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

ja_JPになっていない場合は、以下を確認して下さい。

# cat /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

viにて変更して以下のコマンドで反映させます。念のためマシンを再起動した方が良いかもしれません。

# . /etc/sysconfig/i18n

しかし、まだ日本時間が取得できません。

最後にphp.iniを確認してみましょう。私の場合は、/etc/php.iniにありました。「date.timezone」がコメント化されていると思います。コメントを外して、「Asia/Tokyo」に設定しましょう。


[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo

しかし、残念なことにこれでも日本時間が取得できましぇん(泣)
かくなる上は、apache再起動です。

# /etc/rc.d/init.d/httpd restart

これで日本時間が取得できました。めでたし♪

コメント

タイトルとURLをコピーしました