面板版本:BT-Panel 6.9.32 Beta
系统版本:CentOS 7.6 1810
问题现象:近期安装的 PHP-7.3 缺少 zip 扩展
原因分析:这个 Bug 实际上算是个历史遗留问题。2019年1月18日,有用户发现,PHP 更新到 7.3.1 就会报错:PHP模块重复加载。于是发帖报告的一个 Bug,帖子链接如下:
https://www.bt.cn/bbs/thread-21723-1-1.html
次日,河妖在论坛发帖,公布了问题原因和解决办法:
https://www.bt.cn/bbs/thread-21750-1-1.html
因早期安装的Php7.3是独立编译zip扩展,后续安装及升级是整合编译的,导致升级后会重复加载zip模块
因此,其后的PHP就不再单独编译ZIP扩展了。到了现在,半年多过去了,PHP 更新到了 7.3.8,ZIP 模块又不再整合了(不整合是对的,保持独立编译是最稳妥的方式),可是,却没有单独编译和安装ZIP扩展。
那么,解决办法也很简单,ZIP扩展本来就包含在软件包里,添加回来就可以了:
cd /www/server/php/73/src/ext/zip/
/www/server/php/73/bin/phpize
./configure --with-php-config=/www/server/php/73/bin/php-config
make && make install
然后,把以前从PHP配置文件里删去的行加回来:
echo "extension = zip.so" >> /www/server/php/73/etc/php.ini
最后重载一下 PHP 服务即可:
service php-fpm-73 reload
提示需要重新安装libzip库,应该是zip需要依赖libzip库
系统本身是有安装`libzip`库的(通过`yum info libzip`得知),但是这里还是提示,应该是版本问题,yum安装的是0.10.1版本,从官方获取最新的libzip版本
安装之前我们先删除旧版本
yum remove -y libzip
wget https://nih.at/libzip/libzip-1.2.0.tar.gz tar -zxvf libzip-1.2.0.tar.gz cd libzip-1.2.0 ./configure make && make install
安装好libzip 1.2之后,我们再装zip扩展
继续下面的步骤:
cd /www/server/php/73/src/ext/zip/ /www/server/php/73/bin/phpize ./configure --with-php-config=/www/server/php/73/bin/php-config make
上面的编译有错误:提示如下,找不到文件。
/usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or directory
添加软连接,即可解决
ln -s /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
接下来执行编译安装:
make install
结果出现提示如下:
Installing shared extensions:www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/
表示,我们已经成功安装zip扩展。最后一步就是写php.ini配置文件了。
我们修改php.ini文件在文件末尾添加: extension = /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/zip.so