簡體   English   中英

php.ini默認時區與date.timezone

[英]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

我確認兩個服務器都使用位於/etcphp.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 -iphpinfo()查看時,“默認時區”在服務器#2上不匹配。

問題在於CMS及其插件。 雖然服務器#1和#2具有相同的文件和所有內容,但似乎每個服務器上的插件沒有以相同的順序加載,這允許加載最后一個插件來確定我的腳本的時區。

php -iphpinfo不同的原因是因為在使用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。

要檢查的一些事項:

  1. 檢查phpinfo()輸出中的“已加載配置文件”值,以確保您正在更改正確的php.ini文件。 (這不止一次地咬了我!)
  2. 查看phpinfo()輸出時,請檢查“解析附加.ini文件”行,以查看在通過Web服務器運行時是否還有其他ini文件被解析。
  3. date.timezone可以通過ini_set函數設置。 你有任何代碼嗎? 由於auto_prepend ini設置,請務必檢查可能正在運行的任何代碼。

這是代碼:

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM