AI 摘要

文章摘要:宝塔PHP8在某些服务器上出现了iconv does not support errno的问题。该问题的解决方案包括通过编译安装最新版本的libiconv来解决该问题,并将php安装脚本中的--with-iconv-dir替换为--with-iconv=/usr/local。

这个问题是我在 FutureApple 的一台 CentOS Stream 9 服务器上发现的,具体表现为编译安装 / 快速安装 PHP 8.0 及以上版本时会发生如下编译报错:

checking if we're at 64-bit platform... yes
checking for iconv support... yes
checking for libiconv in -liconv... yes
checking if iconv is glibc's... yes
checking if iconv supports errno... no
configure: error: iconv does not support errno
make: *** No targets specified and no makefile found.  Stop.
make: *** No rule to make target 'install'.  Stop.

解决方案

此处解决方案涉及对宝塔 php 安装脚本修改,且本解决方案可能不适用于任何系统。
已经测试的系统有:CentOS Stream 9 , Debian 11 均为 amd64

一键修复

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz && tar -xzvf libiconv-1.17.tar.gz && cd libiconv-1.17 && ./configure && make && make install && sed -i "s/--with-iconv-dir/--with-iconv=\/usr\/local/g" /www/server/panel/install/php.sh && chattr +i /www/server/panel/install/php.sh

安装 libiconv

可能部分精简版的系统会缺少足够高版本的 libiconv,这里将编译安装,进入 Libiconv 下载最新版本并解压,编译安装到系统默认目录

懒人指令(写作时最新版本为 1.17

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz && tar -xzvf libiconv-1.17.tar.gz && cd libiconv-1.17 && ./configure && make && make install

魔改安装脚本

下载来自宝塔的 php.sh 或直接在服务器上修改(/www/server/panel/install/php.sh)找到编译部分,进行修改,在原文件中找到 –with-iconv-dir ,全部替换为 –with-iconv=/usr/local ,需要替换的位置在:565 568 571 573 592 行

最后,将你更改好的 php.sh 放在 /www/server/panel/install/php.sh ,为防止每次安装前下载 php.sh 使更改失效,使用 chattr +i /www/server/panel/install/php.sh 锁定文件。然后在宝塔中安装即可。

懒人指令

sed -i "s/--with-iconv-dir/--with-iconv=\/usr\/local/g" /www/server/panel/install/php.sh && chattr +i /www/server/panel/install/php.sh