为什么timezonedb扩展没有最新的数据?

为什么timezonedb扩展没有最新的数据?

我已经创建了一个 Dockerfile,并且使用wordpress:php7.4-apache

我尝试过分别使用 3 种不同的方法安装 timezonedb 扩展。

方法 1。

RUN docker-php-source extract \
    && pecl bundle -d /usr/src/php/ext timezonedb \
    && docker-php-ext-configure timezonedb \
    && docker-php-ext-install -j$(nproc) timezonedb \
    && docker-php-source delete

方法 2。

RUN mkdir -p /usr/local/src/pecl \
    && pecl bundle -d /usr/local/src/pecl timezonedb \
    && docker-php-ext-configure /usr/local/src/pecl/timezonedb \
    && docker-php-ext-install -j$(nproc) /usr/local/src/pecl/timezonedb \
    && rm -rf /usr/local/src/pecl

方法 3。

RUN apt-get -y install gcc make autoconf libc-dev pkg-config \
    && pecl install timezonedb \
    && bash -c "echo extension=timezonedb.so > /usr/local/etc/php/conf.d/docker-php-ext-timezonedb.ini"

3种方法均能正常工作。构建docker容器后,我通过检查PHP信息确认扩展已正确安装和加载:

命令行: PHP 信息 - CLI

网站: PHP 信息 - Web

timezonedb 使用最新版本,根据PECL 网站是版本2022.7

我已经检查过了timezonedb github 文件,应该有 597 个时区。

但是,检查 timezonedb 数组后,我发现它只包含 420 个时区。 TimezoneDB 数组内容

那么,问题是,为什么会有如此大的不同?我在这里忽略了什么?

任何帮助都将非常感激。

答案1

一切正常!只需尝试使用ALL_WITH_BC时区组。

https://www.php.net/manual/en/class.datetimezone.php

echo 'ALL : ';
echo count(timezone_identifiers_list(DateTimeZone::ALL)); // -> result : 425
echo '<br/>';

echo 'ALL_WITH_BC : ';
echo count(timezone_identifiers_list(DateTimeZone::ALL_WITH_BC)); // -> result : 593
echo '<br/>';

答案2

我认为从根本上来说,这归结为标签php7.4-apache与当时底层操作系统映像中包含的内容的结合。(由于图像中的问题表明它使用“外部”数据库,因此我认为这是操作系统提供的数据库。)

如果你快速浏览一下wordpressDockerhub页面,他们没有php7.4-apache在他们的列表中支持的标签。
搜索这个会发现这次提交在相应的存储库中,注意 php 7.4 是如何 EOL 的,因此他们删除了对它的支持。

也就是说,看起来以这种方式标记的图像中的所有内容都已过时,因为它不再维护,而不仅限于 Olsen 数据库。

我认为这种情况的安全方面可能比过时的 Olsen 数据库更令人担忧。

我认为选择一个不太具体的标签(甚至latest、 或apache、 或66-apache任何可能符合您要求的标签)可能是一个好主意,除非您确实有非常具体的要求。
如果您确实有要求迫使您使用一些更具体的标签,您只需记住,这种特定标签的生命周期可能比更通用的标签更短,并随时了解其状态。

答案3

如果有人遇到同样的情况,我希望这会有所帮助。

因此,开发人员最终联系了我,说他终于设法获得了正确的时区。

他说他必须使用 PHP 包装器来获取时区。

这确认timezonedb安装正确。

我想感谢@ceejayoz 和@håkan-lindqvist 的帮助,我真的很感激,我花了相当长的时间才解决这个问题。

相关内容