
Я создал Dockerfile и использую wordpress:php7.4-apache
.
Я пробовал установить расширение 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:
Timezonedb использует последнюю версию, которая согласносайт peclэто версия 2022.7
.
Я проверилфайл timezonedb github, и должно быть 597 часовых поясов.
Но, проверив массив timezonedb, я вижу, что он содержит только 420 часовых поясов.
Итак, вопрос в том, почему все так по-другому? Что я тут упустил?
Любая помощь будет высоко оценена.
решение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
в сочетании с тем, что, вероятно, было включено в базовый образ ОС в то время. (Поскольку в вопросе на изображении говорится, что используется «внешняя» база данных, я предполагаю, что это база данных, предоставленная ОС.)
Если вы быстро посмотрите наwordpress
Докерхабстраница, у них нет php7.4-apache
в спискеподдерживаетсятеги больше.
И поиск этого находитэто совершитьв соответствующем репозитории, отметив, что PHP 7.4 устарел, и поэтому его поддержка прекращена.
То есть, похоже, что в изображении, помеченном таким образом, все устарело, поскольку оно больше не поддерживается, и это касается не только базы данных Олсена.
Я думаю, что аспект безопасности в этой ситуации, вероятно, должен вызывать больше беспокойства, чем устаревшая база данных Олсена.
Я думаю, что, вероятно, было бы хорошей идеей выбрать менее конкретный тег (даже latest
, или apache
, или 6
или 6-apache
или что-то еще, что может соответствовать вашим требованиям), если у вас на самом деле нет очень конкретных требований.
И если у вас есть требования, которые заставляют вас использовать какой-то более конкретный тег, вам просто придется иметь в виду, что такой конкретный тег, вероятно, будет иметь более короткий срок службы, чем более общий, и оставаться в курсе его статуса.
решение3
Надеюсь, это поможет, если кто-то столкнется с такой же ситуацией.
Итак, разработчик наконец связался со мной и сказал, что ему наконец удалось получить правильные часовые пояса.
Он сказал, что ему пришлось использовать PHP-оболочку для получения часовых поясов.
Это подтверждает правильность установки timezonedb.
Я хотел бы поблагодарить вас @ceejayoz и @håkan-lindqvist за вашу помощь, я действительно это ценю, мне потребовалось довольно много времени, чтобы раскрыть это дело.