
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:
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.
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_BC
die 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-apache
in 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 aufwordpress
DockerhubSeite, sie haben keine php7.4-apache
in 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 6
oder 6-apache
oder 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.