解决dnmp中php:alpine调用iconv报错不生效问题

问题描述

执行代码:

$fileName = iconv('UTF-8', 'gb2312', $fileName);

报错:

iconv(): Wrong charset, conversion from UTF-8′ to gb2312′ is not allowed

查了一下,据说是iconvlib版本太低,参考:docker-library/php#240

但是看了一下dockerfile,已经针对该问题进行处理见: https://github.com/yeszao/dnmp/pull/167,但是我这边还是出现上面的报错。

查看 phpinfo,显示:

iconv support | enabled
iconv implementation | unknown
iconv library version | unknown

解决方法

该问题已修复,请用最新的 service/php/Dockerfile 文件,重新编译 php 容器 docker compose build php后,重启整个服务即可

fix(PHP5): fixed iconv not working from PHP5.x · yeszao/dnmp@2fcd054 (github.com)

因为新版本的libiconv>=v3.14移除了preloadable_libiconv.so这个扩展包(最后一个版本alpine – gnu-libiconv v3.13 👉 Alpine Linux packages
进入php容器执行下面语句,然后重启容器即可(镜像php:7.4.27-fpm-alpine已验证可用)

apk add gnu-libiconv=1.15-r2 --no-cache --repository http://mirrors.aliyun.com/alpine/v3.12/community

该问题详见:iconv 调用报错 · Issue #414 · yeszao/dnmp (github.com)

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注