2 つの異なるサーバーでPHP のdate()
関数を使用すると、2 つの異なる結果が得られますが、どちらのサーバーも同じである必要があります。
時刻が正しいサーバー #1のファイルを確認したphp.ini
ところ、次のようになりました。
date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone America/Chicago
Directive Local Value Master Value
---------------------------------------------------
date.timezone America/Chicago America/Chicago
サーバー #2 を確認したところ、次のように表示されます。
date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone UTC
Directive Local Value Master Value
---------------------------------------------------
date.timezone America/Chicago America/Chicago
私が見る唯一の違いは、「デフォルトのタイムゾーン」の値です。
両方のサーバーの現在の日付/時刻は次のように表示されます。
Server #1: 10/23/2012 09:40:39
Server #2: 10/23/2012 14:40:39
php.ini
両方のサーバーが次の場所を使用していることを確認し、/etc
両方の Web ディレクトリを検索して、タイムゾーンが上書きされる可能性のある場所を探しました。
grep -r "date_default_timezone_set" *
ただし、その点では、どちらにも同じ設定の同じファイルが含まれています。
「デフォルトのタイムゾーン」が5時間の違いの原因ですか? もしそうなら、どうすれば修正できますか?
アップデート
読み込まれた構成ファイル。
サーバー #2 には、次の 2 つの追加の ini ファイルが含まれています。
/etc/php.d/snmp.ini
/etc/php.d/apc.ini
php -i 結果。
サーバー #1:
date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago
Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago
サーバー #2:
date/time support => enabled
"Olson" Timezone Database Version => 0.system
Timezone Database => internal
Default timezone => America/Chicago
Directive => Local Value => Master Value
date.timezone => America/Chicago => America/Chicago
ここで注目すべき興味深い点は、何らかの理由で、サーバー #2 を介して表示する場合と Web ページで表示する場合で、「デフォルトのタイムゾーン」が一致しないことphp -i
ですphpinfo()
。
解決
問題は CMS とそのプラグインにありました。サーバー #1 と #2 には同じファイルとすべてがありましたが、各サーバーでプラグインが同じ順序で読み込まれていないようです。これにより、最後に読み込まれたプラグインがスクリプトのタイムゾーンを決定することができました。
php -i
とphpinfo
が異なる理由は、 を使用した後、印刷されるdate_default_timezone_set()
内容に影響するためです。phpinfo()
修正は、経由で必要なタイムゾーンにいることを確認することでしたdate_default_timezone_set()
。この質問を投稿する前にうまくいかなかった理由は、CMS からいくつかの必要なファイルをロードする前にこれを宣言したためでした。これにより、タイムゾーンが再度設定された可能性があります。