
我建立了一個 Dockerfile,並使用wordpress:php7.4-apache
.
我嘗試分別使用 3 種不同的方法安裝 timezonedb 擴充功能。
方法一。
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
Dockerhubphp7.4-apache
頁面,他們的清單中沒有支持的不再有標籤了。
搜尋這個發現這次提交在相應的存儲庫中,注意到 php 7.4 已 EOL,因此他們刪除了對它的支援。
即,以這種方式標記的圖像中的所有內容似乎都已過時,因為它不再維護,而不僅限於 Olsen 資料庫。
我認為這種情況的安全方面可能應該比過時的奧爾森資料庫更令人擔憂。
latest
我認為選擇不太具體的標籤(甚至、 或apache
、 或6
或任何可能適合您的要求的標籤)可能是個好主意,6-apache
除非您實際上有非常特定的要求。
如果您確實有要求迫使您使用一些更具體的標籤,您只需記住,這樣的特定標籤的生命週期可能比更通用的標籤更短,並隨時了解其狀態。
答案3
如果有人遇到同樣的情況,我希望這會有所幫助。
因此,開發人員最終聯繫了我,說他終於設法獲得了正確的時區。
他說他必須使用 PHP 包裝器來取得時區。
這證實了 timezonedb 安裝是正確的。
我要感謝@ceejayoz 和@håkan-lindqvist 的幫助,我真的很感激,我花了相當多的時間來解決這個案例。