![](/img/trans.png)
[英]How to enable xdebug in php:7.4-fpm-alpine docker container?
[英]Why does iconv returns empty string in php:7.4-fpm-alpine docker
鉴于以下代码:
<?php
$mb_name = "湊崎 紗夏";
$tmp_mb_name = iconv('UTF-8', 'UTF-8//IGNORE', $mb_name);
if($tmp_mb_name != $mb_name) {
echo "tmp_mb_name: {$tmp_mb_name}\n";
echo "mb_name: {$mb_name}\n";
exit;
} else {
echo "no problem!\n";
}
我在3v4l.org测试过,输出no problem!
但是,在php:7.4-fpm-alpine docker
镜像中,它输出以下内容:
tmp_mb_name:
mb_name: 湊崎 紗夏
根据php.net :
如果附加字符串 //IGNORE,则无法在目标字符集中表示的字符将被静默丢弃。
为什么$mb_name
在 php alpine 图像中不能用UTF-8
表示?
添加error_reporting(-1);
你会看到:
注意: iconv(): 错误的字符集,第 5 行的 /test.php 中不允许从 'UTF-8' 转换为 'UTF-8//IGNORE'
因为显然alpine 图像不能与 iconv 一起正常工作,并且维护者只是放弃了实际修复它。 我认为在这里需要注意的是,PHP 不提供任何官方的 docker 镜像,这些是由 docker 社区维护的 PHP 的“Docker 官方”镜像。
如果您不介意更大一些的基本图像,只需切换到非高山图像即可。
编辑:是的,上述解决方法似乎确实有效。 为了不在链接后面留下有用的信息,例如 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 ./
我有同样的问题。 将 php-fpm 图像的提供者从 alpine 更改为 php.net 对我有用。
Dockerfile 示例:
Original:
FROM php:${VERSION}-fpm-alpine
Edited:
FROM php:${VERSION}-fpm
如果您使用的是alpine:3.14
基础镜像,您只需安装以下软件包https://pkgs.alpinelinux.org/packages?name=php7-iconv&branch=v3.14
通过按该顺序安装php7-mbstring
php7-iconv
修复
RUN apk --no-cache add php7-mbstring php7-iconv
原始解决方案在这里: https : //github.com/docker-library/php/issues/240#issuecomment-355489551
在尝试了很多不同的方法之后
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;'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.