4 回答
TA贡献1770条经验 获得超3个赞
添加error_reporting(-1);
,您将看到:
注意: iconv():错误的字符集,从“UTF-8”转换而来到“UTF-8//忽略” /test.php 第 5 行不允许
因为显然alpine 图像无法与 iconv 正常工作 和维护者只是放弃了实际修复它。我认为这里需要注意的是,PHP 不提供任何 官方 docker 镜像,这些是“Docker 官方”镜像。由 docker 社区维护的 PHP 镜像。
如果您不介意更大的基础图像,只需切换到非高山图像即可。
示例 Dockerfile:
FROM php:7.4-alpine
# fix work iconv library with alpine
RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/ --allow-untrusted gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
示例构建:
docker build -t php:7.4-alpine-iconv ./
TA贡献1801条经验 获得超8个赞
PHP5.6.40和Alpine3.8
相当古老的帖子,其中包含答案,但由于没有答案涵盖旧版本的PHP
和alpine linux
,我将发布我如何修复它。< /span>
1/ 从 下载 php 扩展 .so
文件(因为下一个版本中不存在该扩展,并且某些旧版本(例如 alpine3.x)不存在该扩展。 8)alpine3.13
docker run -v $(pwd)/out:/out -it alpine:3.13 \\n/bin/sh -c 'apk add --no-cache gnu-libiconv && cp -f /usr/lib/preloadable_libiconv.so /out/preloadable_libiconv.so'
您应该在本地 /out/ 目录中找到*.so
文件。
2/ 将文件添加到您的图像Dockerfile
并使用 php 预加载
COPY your/file/previously/downloaded/path/preloadable_libiconv.so /usr/lib/preloadable_libiconv.so ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
你不应该再有这个错误了。
TA贡献1797条经验 获得超6个赞
如果您使用的是alpine:3.14
基础映像,则只需安装以下软件包https://pkgs.alpinelinux.org/packages?name =php7-iconv&branch=v3.14
TA贡献1934条经验 获得超2个赞
最后我用PHP8解决了这个问题
在尝试了很多不同的方法之后
docker pull php:8.0.14-cli-alpine3.15
docker run -dit --name myphp php:8.0.14-cli-alpine3.15
docker exec -it --user root myphp ash
现在我们在容器中:
apk add --no-cache --virtual .b $PHPIZE_DEPS curl-dev openssl-dev pcre-dev pcre2-dev zlib-dev wget build-base php8-dev nano
apk add --no-cache --repository https://dl-3.alpinelinux.org/alpine/edge/testing/ gnu-libiconv-dev
mv /usr/bin/gnu-iconv /usr/bin/iconv
mv /usr/include/gnu-libiconv/*.h /usr/include
rm -fr /usr/include/gnu-libiconv
mkdir -p /tmp/q
cd /tmp/q
wget https://secure.php.net/distributions/php-8.0.14.tar.gz
tar xzf php-8.0.14.tar.gz
cd php-8.0.14/ext/iconv
phpize
./configure --with-iconv=/usr
错误
configure: error: iconv does not support errno
尝试解决它:
nano configure
现在删除“else”块(包含iconv does not support errno错误消息)
继续
./configure --with-iconv=/usr
make
make install
mkdir -p /etc/php8/conf.d
echo "extension=iconv.so" > /etc/php8/conf.d/iconv.ini
apk del .b
cd
rm -fr /tmp/q
测试
php -m | grep iconv
php -i | grep iconv
php -r 'echo iconv("UTF-8","UTF-8//IGNORE","A\xe9 B"),PHP_EOL;'
- 4 回答
- 0 关注
- 150 浏览
添加回答
举报