飘在云端

东西南北,海角天涯

· 备查 · · 512次浏览

宝塔面板php没有默认安装zip扩展,手动编译添加

不知道什么情况,php 7.4-8.2 的所有版本默认没编译 zip 扩展,查看相关插件模块目录,是有编译成品的 .so 文件,看起来是编译时刻意没有加入模块参数?


更新:2024-10-26 ,新增 一个 PHP 8.2.24 最新依赖+完全体版本的 zip.so 扩展
请输入图片描述

编译环境: php8.2.24,Ubuntu v22.04.4 LTS

使用了 exe 自解压格式打包
https://www.alipan.com/s/qYC2w324tgr
提取码 dv31

使用方法,将其解压后的 zip.so 传到 /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829 目录
然后在 php.ini(php运行环境→配置修改) 末尾追加一行

extension = /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/zip.so

重启 php 环境,实时生效

可能不能直接用,因为是动态链接库,需要系统的环境的特定版本支持
我抽空看看能不能全部编译成静态库


请输入图片描述

编译了一份此时此刻最新版 zstd v1.5.5-kernel、libzip v1.10.1、zip v1.22.3、 xz ,开箱即用,仅支持 php 8.0.x 版本开箱即用,注意自行重命名为 zip.so,编译成品文件下载地址:
zip.so
https://www.alipan.com/s/EKA47SmMnDu
提取码: 7j6j

下载后传到服务器,覆盖同名文件,重启 PHP 相关服务立刻生效

更新:2024-1-12 又编译了一份 php 7.3.x 的最新版 zip.so,都是含 libzip v1.10.1、zip v1.22.3、 xz 支持,注意自行重命名为 zip.so

zip.so-php7.3.x.so
https://www.alipan.com/s/SmVVqwWvsGy
提取码: 2zg1


以此刻我的 php8.0 没有默认编译进去的 zip 扩展为例,手动添加

进入 /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/
下载此时的最新模块版本 2023-11-14 发布的 v1.22.3 zip

可以自行访问 http://pecl.php.net/package/zip 查看此时的最新版本

wget http://pecl.php.net/get/zip-1.22.3.tgz

加权限并解压

chmod +x zip-1.22.3.tgz && tar zxvf zip-1.22.3.tgz && cd zip-1.22.3

编译

/www/server/php/80/bin/phpize
./configure --with-php-config=/www/server/php/80/bin/php-config

编译扩展

make -j$(nproc) && make install

编译后的扩展在父级目录
修改 php 配置启用 zip 扩展

echo "zip.so" >> /www/server/php/80/etc/php.ini

重启 php-fpm

/etc/init.d/php-fpm-80 reload

此时 phpinfo 已经有扩展信息,输出信息中发现不过不是完全体,可能什么参数或者依赖没有,缺少 xz / zstd 支持

    zip
Zip    enabled
Zip version    1.22.3
Libzip version    1.7.3
BZIP2 compression    Yes
XZ compression    No
ZSTD compression    No
AES-128 encryption    Yes
AES-192 encryption    Yes
AES-256 encryption    Yes

强迫症发作,搞都搞了,必须实现完全体,重新编译
检查相关包都实际上安装了,以防万一重装,zstd 用最新版

zstd,GitHub: https://github.com/facebook/zstd/archive/refs/tags/v1.5.5-kernel.zip

源码编译安装 zstd


wget https://github.com/facebook/zstd/archive/refs/tags/v1.5.5-kernel.tar.gz
unzip v1.5.5-kernel.zip && cd zstd-1.5.5-kernel/ && make -j$(nproc) && make -j$(nproc) install

重装 libmbedtls

apt reinstall -y libmbedtls-dev

发现 cmake 没有添加相关库文件的路径,手动添加,cd 到 编译时 cmake 所在目录,这里是 /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/zstd-1.5.5-kernel/build/cmake

cmake -D_zstd_LIBRARY=/usr/lib/x86_64-linux-gnu -Dzstd_INCLUDE_DIR=/usr/include


cmake -DMbedTLS_LIBRARY=/usr/lib/x86_64-linux-gnu -Dzstd_INCLUDE_DIR=/usr/include

这里我们先暂停,先更新其使用的 libzip 库版本为此时的最新,访问 https://libzip.org/,下载最新版 libzip

cd .. & cd .. & cd ..
wget https://libzip.org/download/libzip-1.10.1.tar.gz
tar zxvf libzip-1.10.1.tar.gz && cd libzip-1.10.1
mkdir build && cd build
cmake .. && make -j$(nproc) && make install

更新动态链接库缓存 ldconfig,验证 libzip 库是否更新 pkg-config --modversion libzip,返回你所编译的版本

重启 php-fpm 之后,可以 php -m | grep zip 检查是否加载成功,并在 phpinfo 界面查看 zip 扩展的详细信息

请输入图片描述

评论 (0条)