如何在PHP中更新时区数据库(更新时区信息)?

13

phpinfo()显示我们的系统正在使用“Olson”时区数据库版本2010.3。我认为它现在已经过时,但找不到一个权威的位置来确认这一点。

(a)我能否更新整个PHP的时区信息?
(b)如果可以,那么如何更新?我看到了http://www.electrictoolbox.com/correct-php-timezone/上的说明,它说,在安装适当的模块后,我必须:

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

我们需要这样做吗?PHP不应该自动使用正确的文件吗?


1
是的,您必须在php.ini中添加extension=timezonedb.so,否则php如何知道它是否需要使用该扩展呢? - ursuleacv
2
sudo pecl install timezonedb - Timo Huovinen
4个回答

6
据我所知,时区数据库(TDB)已经随着PHP本身的分发而存在。由于这个原因,时区数据库会在一段时间后变得过时,您应该更新PHP或TDB以反映TDB中的更改。
有一个PECL扩展发布新的TDB包,您可以下载、安装并在旧的PHP安装中使用它们。
我不知道是否有一种直接在PHP中更新TDB的方法。PECL扩展是为解决此问题而创建的。

嗨 dwich - 你是在说如果我们更新 PHP 本身,那也应该可以解决问题吗?我认为 PHP 更新的频率并不高... - tzmatt7447
关于PECL - 我对这个概念不太熟悉 - 这现在是PHP的标准内置部分吗? - tzmatt7447
1
@tzmatt7447:如果您更新PHP,它可能包含更新版本的TDB,但您无法确定它是否是最新版本。此外,在PHP常规发布之间也可能会有新版本的TDB,因此再次强调 - 如果您更新PHP,您不能确定是否会获得最新的TDB,并且 - PHP不会仅因为TDB已更新而发布。 - dwich
2
我不是PECL专家,如果你想尝试它,请搜索有关在您的操作系统上安装它的信息。我们使用FreeBSD,安装就像这样简单(伪命令):pkg_install pecl-timezonedb。然后重新启动Apache,完成了。 - dwich

5

PECL扩展实际上是时区数据库。每当从这里发布新版本的数据库时,扩展就会重新编译以更新时区数据库。

因此,您实际上会用新重新编译的版本覆盖旧扩展并重新启动Web服务器;假设PHP被用作模块。


2
最好只更新您的PHP版本(特别是如果您想在Windows机器上更新它,否则您必须自己编译扩展程序),因为据我所记得,该扩展程序不仅适用于Unix / Linux,而且并非Windows-Ready - 因此,如果您想在Windows上执行此操作,则必须使用VC6或VC9编译器自行编译。因此,如果您可以更新您的PHP版本,那将是最快的解决方案(至少对我来说是这样),当然PHP可能没有最新的时区数据库信息,但我必须解决时区数据库的问题,并且它已在我拥有的较新版本的PHP中得到解决。如果您正在为Unix / Linux执行此操作,您也可以尝试PECL扩展,我认为那可能更容易和更快速。

4
自2014.10版本以来,该扩展可以作为Windows的dll下载,请参考https://pecl.php.net/package/timezonedb。 - ursuleacv

1
执行完整的时区更新(我们遇到了有关不正确的俄罗斯/莫斯科时区的问题):
#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

当运行命令 "pecl upgrade intl" 时,它会要求输入 "请指定 ICU 库和头文件所在的位置 [默认] :",这里应该添加什么? - Disha Goyal
请点击此处查看有关在Mac上安装PHP Intl的线索:https://dev59.com/2Yzda4cB1Zd3GeqPmGqT - trafalgar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接