當我在兩臺不同的服務器上使用PHP的date()
函數時,我得到兩個不同的結果,但兩臺服務器應該是相同的。php.ini默認時區與date.timezone
我檢查服務器#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
我證實,這兩個服務器使用位於內/etc
php.ini
我還搜查兩個網站目錄的時區可能會被覆蓋的任何地方:
但是在這方面,它們都包含相同設置的相同文件。
是「默認時區」是什麼導致5h差異?如果是這樣,我該如何糾正它?
UPDATE
加載配置文件。
服務器#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時通過php -i
與網頁上的phpinfo()
進行查看。
SOLUTION
的問題是與CMS和其插件。儘管服務器#1和#2具有相同的文件和所有內容,但似乎並未在每臺服務器上以相同順序加載插件,這允許加載最後一個插件來確定我的腳本的時區。
原因php -i
和phpinfo
不同的是因爲在使用date_default_timezone_set()
之後,它會影響打印的內容phpinfo()
。
修復是確保我在時區中需要通過date_default_timezone_set()
。在我發佈這個問題之前沒有爲我工作的原因是因爲我在從CMS加載一些必需的文件之前宣佈了這一點,這可能會在其中再次設置時區。
兩臺服務器上的系統時間是否相同? –
將所有服務器配置爲使用UCT作爲其基準日期確實是一個好主意。它使一切變得更加可預測。 – SDC
@AlexLunix是的,我剛剛查過,它們都是一樣的:'Tue Oct 23 10:03:57 CDT 2012' – NightHawk