[英]php.ini default timezone vs. date.timezone
當我在兩個不同的服務器上使用PHP的date()
函數時,我得到兩個不同的結果,但兩個服務器應該是相同的。
我檢查了服務器#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
並且我還搜索了兩個web目錄以查找時區可能被覆蓋的任何位置:
grep -r "date_default_timezone_set" *
但在這方面,它們都包含具有相同設置的相同文件。
“默認時區”是什么導致了5h的差異? 如果是這樣,我該如何糾正?
UPDATE
加載的配置文件。
Server#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
這里有趣的是,由於某種原因,在網頁上通過php -i
與phpinfo()
查看時,“默認時區”在服務器#2上不匹配。
解
問題在於CMS及其插件。 雖然服務器#1和#2具有相同的文件和所有內容,但似乎每個服務器上的插件沒有以相同的順序加載,這允許加載最后一個插件來確定我的腳本的時區。
php -i
和phpinfo
不同的原因是因為在使用date_default_timezone_set()
,它會影響phpinfo()
將打印的內容。
修復是通過date_default_timezone_set()
確保我在我需要的時區。 在我發布此問題之前對我不起作用的原因是因為我在從CMS加載一些必需文件之前聲明了這一點,這可能會在那里再次設置時區。
date()
依賴於date.timezone INI設置。 由於一個是芝加哥(CT),另一個是UTC,這是你的5小時差異。
我相信從PHP> 5.2開始你應該收到:
PHP警告:未知:依賴系統的時區設置是不安全的。 您需要使用date.timezone設置或date_default_timezone_set()函數。
我建議您查看新的DateTime對象或使用SDC建議的UTC。
要檢查的一些事項:
這是代碼:
[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')
更改為您想要的時區即可。
來源 。
http://us.php.net/manual/en/function.date-default-timezone-get.php
TZ環境優先於php.ini默認值; 也許這就是原因。 您可以通過顯式調用date_default_timezone_set來解決此問題。
在我的案例中使用Ubuntu 14.0 LTS默認時區設置為:
/etc/php5/cli/php.ini
我可以用以下方式驗證:
php -i | grep“timezone”
如果在php.ini中設置date.timezone值但它不起作用(即本地值和主值不同),那么您可能需要在apache配置文件中更新類似的內容:
<IfModule mod_php5.c>
php_value date.timezone "Europe/Paris"
</IfModule>
對於之前刪除了上述答案的mod:我已經搜索了幾個小時來找到這個解決方案。 不要因為您認為答案是重復而刪除答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.