2010-08-25 87 views
7

phpinfo()顯示我們的系統使用「」Olson「時區數據庫版本2010.3」。我認爲現在已過時,但找不到可以確認的權威位置。如何更新PHP中的timezonedb(更新時區信息)?

(a)我可以更新整個PHP的時區信息嗎? (b)如果是這樣,我該如何更新?我看到指示在http://www.electrictoolbox.com/correct-php-timezone/它說,安裝相應的模塊後,它說我有:

You should add "extension=timezonedb.so" to php.ini 

我們需要做的是什麼?不應該自動使用正確的文件?

+1

是的,你必須添加擴展= timezonedb.so在php.ini,否則PHP怎麼會知道它需要使用該擴展名或不 – ursuleacv 2015-05-28 13:14:51

+2

'sudo pecl install timezonedb' – 2015-09-28 07:15:30

回答

4

據我所知,時區數據庫(TDB)分佈在PHP本身內部。由於時區數據庫在一段時間後會變得過時,您應該更新PHP或TDB以反映TDB中的更改。

有一個PECL擴展可以發佈新的TDB包,您可以在舊的PHP安裝中下載並安裝它們並使用它們。

我不知道有一種方法可以直接在PHP中更新TDB。 PECL擴展是針對這個問題而設計的。

+0

您好dwich - 你是否指出,如果我們更新PHP本身也應該工作?我會認爲PHP更新是少之又少的... – tzmatt7447 2010-08-25 13:34:10

+0

至於PECL - 我不太熟悉這個概念 - 這是PHP的標準內置部分嗎? – tzmatt7447 2010-08-25 13:34:55

+1

@ tzmatt7447:如果您更新PHP,它可能包含較新版本的TDB,但您無法確定它是否是最新版本。在常規的PHP版本之間也可能有新的TDB版本 - 你不能確定你是否更新PHP,你會得到最新的TDB,以及 - 僅僅因爲TDB被更新而不會發布PHP。 – dwich 2010-08-26 11:29:35

2

最好是更新你的PHP版本(特別是,如果你想在Windows機器上更新它,否則你必須自己編譯擴展名),因爲據我所知擴展名不是Windows-只准備好unix/linux - 所以如果你想在windows上做,你必須使用VC6或VC9編譯器自己編譯它)。因此,如果你可以更新你的PHP版本,這將是最快的解決方案(它至少對我來說),當然PHP可能沒有最新的時區數據庫信息,但我必須解決與時區數據庫的問題和它在我擁有的PHP的更新版本中修復。 如果你正在爲unix/linux做它,你可能會嘗試PECL擴展,我認爲這對你來說可能更容易&。

+3

自2014.10版以來,擴展程序可以下載爲dll for windows,請參閱https://pecl.php.net/package/timezonedb – ursuleacv 2015-05-28 13:17:38

2

PECL擴展實際上是時區數據庫。每次從here發佈新版本的數據庫時,都會使用更新後的時區數據庫重新編譯擴展。

所以,你實際上會用新重新編譯的版本覆蓋舊的擴展並重新啓動你的web服務器;假設PHP被用作模塊。

0

做一個完整的時區更新(我們曾與俄羅斯不正確/莫斯科時間問題):

#for OS - CentOS and MySQL 
yum update tzdata 
mysql_tzinfo_to_sql /usr/share/zoneinfo 
#for PHP 
pecl upgrade timezonedb 
pecl upgrade intl 

#dependencies you may need for the above: 
yum install gcc 
yum install gcc-c++ 
yum install libicu-devel