Warum verfügt die TimezoneDB-Erweiterung nicht über die aktuellsten Daten?

Warum verfügt die TimezoneDB-Erweiterung nicht über die aktuellsten Daten?

Ich habe eine Docker-Datei erstellt und verwende die wordpress:php7.4-apache.

Ich habe versucht, die TimezoneDB-Erweiterung mit drei verschiedenen Methoden separat zu installieren.

Methode 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

Methode 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

Methode 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"

Die 3 Methoden funktionieren einwandfrei. Nachdem ich den Docker-Container erstellt habe, bestätige ich, dass die Erweiterung ordnungsgemäß installiert und geladen wurde, indem ich die PHP-Informationen überprüfe:

Befehlszeilenschnittstelle: PHP-Info - CLI

Netz: PHP-Info - Web

Die Zeitzonendatenbank verwendet die neueste Version, die lautdie pecl-siteist Version 2022.7.

Ich habe geprüftdie TimezoneDB-GitHub-Datei, und es sollte 597 Zeitzonen geben.

Aber beim Überprüfen des TimezoneDB-Arrays sehe ich, dass es nur 420 Zeitzonen enthält. Inhalt des TimezoneDB-Arrays

Die Frage ist also: Warum ist es so anders? Was habe ich hier übersehen?

Ich wäre für jede Art von Hilfe sehr dankbar.

Antwort1

alles in Ordnung! Versuchen Sie einfach, ALL_WITH_BCdie Zeitzonengruppe zu verwenden.

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/>';

Antwort2

Ich denke, im Grunde läuft es auf das Tag php7.4-apachein Kombination mit wahrscheinlich nur dem hinaus, was damals im zugrunde liegenden Betriebssystem-Image enthalten war. (Da in der Frage im Image steht, dass eine „externe“ Datenbank verwendet wird, gehe ich davon aus, dass dies die vom Betriebssystem bereitgestellte ist.)

Werfen Sie einen kurzen Blick aufwordpressDockerhubSeite, sie haben keine php7.4-apachein ihrer Liste vonunterstütztTags mehr.
Und wenn man danach sucht, findet mandieses Commitim entsprechenden Repository mit dem Hinweis, dass PHP 7.4 EOL ist und daher der Support dafür eingestellt wurde.

Das heißt, es scheint, dass in dem auf diese Weise markierten Bild alles veraltet ist, da es nicht mehr gepflegt wird und nicht auf die Olsen-Datenbank beschränkt ist.

Ich denke, dass der Sicherheitsaspekt dieser Situation wahrscheinlich besorgniserregender ist als die veraltete Olsen-Datenbank.

Ich denke, es wäre wahrscheinlich eine gute Idee, ein weniger spezifisches Tag zu wählen (sogar latest, oder apache, oder 6oder 6-apacheoder was auch immer Ihren Anforderungen entsprechen könnte), es sei denn, Sie haben tatsächlich sehr spezifische Anforderungen.
Und wenn Sie Anforderungen haben, die Sie dazu zwingen, ein spezifischeres Tag zu verwenden, müssen Sie einfach bedenken, dass ein so spezifisches Tag wahrscheinlich eine kürzere Lebensdauer hat als ein allgemeineres, und seinen Status im Auge behalten.

Antwort3

für den Fall, dass jemand mit dem gleichen Problem konfrontiert wird, hoffe ich, dass dies hilft.

Der Entwickler hat sich schließlich bei mir gemeldet und mir gesagt, dass er es endlich geschafft hat, die richtigen Zeitzonen zu ermitteln.

Er sagte, er müsse den PHP-Wrapper verwenden, um die Zeitzonen zu erhalten.

Dies bestätigt, dass die TimezoneDB-Installation korrekt ist.

Ich möchte mich bei @ceejayoz und @håkan-lindqvist für Ihre Hilfe bedanken. Ich weiß das wirklich zu schätzen. Es hat ziemlich lange gedauert, bis ich diesen Fall gelöst hatte.

verwandte Informationen