在Docker容器中使用PHP intl扩展

47

我正在尝试在我的Docker容器中加载intl PHP扩展,但似乎无法正常工作。

已经尝试过这个https://github.com/docker-library/php/issues/57,但仍然收到相同的错误消息:

configure: error: in `/usr/src/php/ext/intl':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details

我的 Docker 文件看起来像这样:

RUN apt-get -y update \
&& apt-get install -y libicu-dev\
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl

它正在从php:fpm加载,有没有人遇到过这个问题并解决了它?这让我感到疯狂。

4个回答

77

在第二行的运行命令结束符反斜杠前加一个空格后,您的代码对我完美地起作用了:

RUN apt-get -y update \
&& apt-get install -y libicu-dev \ ### <-- Added space here
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl

这是正确的答案。所有命令在 Docker 上的 PHP 7.4 和 PHP 8.3 中也都可以正常工作。提醒一下:IntlDateFormatter 是 strftime 的良好替代品,因为在 PHP8.1 中已被弃用。 - Alexandre T.
这解决了在PHP 8.2中出现的“致命错误:未找到类“UConverter”的问题...” - T. Junghans

17

看起来有些要求缺失了。下面的代码片段对我有效:

ARG PHP_VERSION=5.6
FROM php:${PHP_VERSION}-fpm-jessie

apt-get install -y zlib1g-dev libicu-dev g++ \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl

5

最佳答案!非常感谢你! - Alexander Matrosov

0

对于旧的构建脚本,这个问题可能是由于icu-devtools最近删除了icu-config引起的。在Debian上,可以通过降级libicu-dev和icu-devtools来解决:

apt-get install libicu-dev=57.1-6+deb9u4 icu-devtools=57.1-6+deb9u4

要确定适合您的特定版本,只需执行以下操作:

apt-cache policy libicu-dev

选择一个版本高达~60。icu-devtools也是如此。

我在尝试为PHP 7.1构建Docker镜像时发现了这个问题。有关更多上下文,请查看Debian bug报告920900


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接