不知道什么情况,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 扩展的详细信息