14

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 -iphpinfoが異なる理由は、 を使用した後、印刷されるdate_default_timezone_set()内容に影響するためです。phpinfo()

修正は、経由で必要なタイムゾーンにいることを確認することでしたdate_default_timezone_set()。この質問を投稿する前にうまくいかなかった理由は、CMS からいくつかの必要なファイルをロードする前にこれを宣言したためでした。これにより、タイムゾーンが再度設定された可能性があります。

4

6 に答える 6

11

date()date.timezone INI 設定に依存します。1 つはシカゴ (CT) で、もう 1 つは UTC であるため、5 時間の差になります。

PHP > 5.2 の時点では、次のように表示されるはずです

PHP 警告: 不明: システムのタイムゾーン設定に頼るのは安全ではありません。date.timezone 設定または date_default_timezone_set() 関数を使用する必要があります。

新しいDateTimeオブジェクトを確認するか、 SDCのアドバイスに従って UTC を使用することをお勧めします。

于 2012-10-23T15:04:35.963 に答える
1

私の場合、Ubuntu 14.0 LTSのデフォルトのタイムゾーンを使用すると、次のように設定されました。

/etc/php5/cli/php.ini

次に、次の方法で確認できます。

php -i | grep "タイムゾーン"

于 2014-10-28T13:03:53.150 に答える
1

http://us.php.net/manual/en/function.date-default-timezone-get.php

TZ 環境は、php.ini のデフォルト値よりも優先されます。多分それが理由です。date_default_timezone_set を明示的に呼び出すことで、これを修正できます。

于 2013-08-26T08:02:54.143 に答える