2012-10-23 10 views
14

PHPのdate()関数を2つの異なるサーバーで使用すると、2つの異なる結果が得られますが、両方のサーバーが同じである必要があります。 php.iniデフォルトのタイムゾーンとdate.timezoneの比較

は、私は時間が正確であるサーバ#1、上の php.iniファイルをチェックし、次のようになります。私は、サーバー#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 

と次のようになります。

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内に位置し、私はまた、タイムゾーンが上書きされる可能性があります任意の場所のため、両方のウェブディレクトリを検索使用していることが確認さ:

​​

ただし、両方のファイルには同じ設定の同じファイルが含まれています。

"デフォルトのタイムゾーン"は5時間の違いの原因ですか?もしそうなら、私はそれをどのように修正するのですか?

UPDATE

ロードされたコンフィギュレーションファイル。

/etc/php.d/snmp.ini 
/etc/php.d/apc.ini 

PHP -i結果:

サーバー#2は、2つの追加のiniファイルが含まれています。

サーバ#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に一致していないということですウェブページ上でphp -iphpinfo()の間でそれを見てください。

SOLUTION

問題は、CMSとそのプラグインとありました。サーバー#1と#2は同じファイルとすべてのものを持っていましたが、プラグインは各サーバー上で同じ順序でロードされていないように見え、最後のプラグインをロードしてスクリプトのタイムゾーンを決定できました。

php -iphpinfoは、date_default_timezone_set()を使用すると、phpinfo()が印刷されるために異なるためです。

フィックスは、私がdate_default_timezone_set()を経由する必要があったタイムゾーンにいることを保証していました。私がこの質問を投稿する前に私がうまくいかなかったのは、CMSからいくつかの必要なファイルを読み込む前にこれを宣言したためです。

+0

両方のサーバーのシステム時間は同じですか? –

+1

UCTを基準日として使用するようにすべてのサーバーを構成することをお勧めします。それはすべてをずっと予測可能にします。 – SDC

+0

@AlexLunixはい、私はちょうどチェックし、それらは同じです: 'Tue Oct 23 10:03:57 CDT 2012' – NightHawk

答えて

11

date()は、INI設定のdate.timezoneに依存します。 1つはChicago(CT)で、もう1つはUTCなので、それは5時間の違いです。

は、私はあなたが受け取るべきPHP> 5.2のようを信じる:

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

私は新しいDateTimeオブジェクトを見たりSDCの助言としてUTCを使用することをお勧めします。

+0

php.iniの中に 'date.timezone'が設定されています。両方のサーバーで同じ値に設定されています。私は、 "デフォルトのタイムゾーン"が設定されているかどうかはわかりません。 – NightHawk

+0

+1 DateTimeクラスを推奨します。これは、古い日付処理関数よりも時間軸上の混乱にひどく陥ることはありません。そしてそれははるかに機能的です。 'date()'関数とその仲間はピットに投げ込まれ、戻されることはありません。 – SDC

+0

それはどこかに設定されていないので、サーバ#2の 'Default timezone UTC'が設定されています。 –

5

チェックするためにいくつかのこと:

  1. は、あなたが正しいphp.iniファイルを変更していることを確認するためにするphpinfo()の出力に「ロードされた設定ファイル」の値を確認してください。
  2. phpinfo()の出力を見て、 ".iniファイルを解析しました"という行をチェックして、Webサーバー経由で解析中の追加のiniファイルがあるかどうか確認してください。
  3. date.timezoneは、ini_set関数で設定できます。それを行うコードはありますか? auto_prepend ini設定のために実行されているコードも確認してください。
+0

[1.]もう一度もう一度チェックしてください。両方とも '/ etc/php.ini'から読み込まれます。[2.]サーバ#2には、さらに2つのiniファイルがあることに気付きました:' snmp.ini'と 'apc.ini'です。 [3] 'init_set(date.timezone')のようなものを探しますか? – NightHawk

+0

[2]これらのiniファイルはdate.timezoneには何も付けるべきではありませんが、とにかくチェックします。[3]閉じる、ini_set関数呼び出し - http://php.net/ini_set – bradym

+0

[2.]私は両方のファイルを調べましたが、時間については何もありません。[3.]私は両方のサーバと唯一の 'ini_set'関数で検索を行いました – NightHawk

2

はコードです:

[Date] 
date.timezone = ('America/New_York') 

date.default_latitude = 31.7667 

date.default_longitude = 35.2333 

date.sunrise_zenith = 90.583333 

date.sunset_zenith = 90.583333 

ちょうどあなたの希望の時間帯にdate.timezone = ('America/New_York')を変更します。

Source。私の場合のUbuntu 14.0 LTS デフォルトのタイムゾーンを使用して

+0

括弧は最初の行で何をしますか?ドキュメントには何もありません... –

1

がで設定されました:

/etc/php5/cli/php.ini

私は、その後で確認することができます:

PHP -i | grep "timezone"

+0

コマンドラインインターフェイス(cli)はい。しかし、Apache WebのPHP設定は/etc/php5/apache2/php.iniにあります –

1

php.iniでdate.timezoneの値を設定しても動作しない場合(つまりローカル値とマスター値が異なる場合)、Apacheの設定ファイルで次のように更新する必要があります:

<IfModule mod_php5.c> 
    php_value date.timezone "Europe/Paris" 
</IfModule> 

上記の答えを削除した人には:私はこの解決策を見つけるために何時間も探しました。回答が重複していると思うだけで、回答を削除しないでください。

関連する問題