关于使用 PHP7.1 进行 zip 压缩的备注
你好。
我是Mandai,负责Wild 开发团队。
我被要求编写代码以使用 PHP 对在 PHP7.1 环境中开发的内容执行 zip 压缩。
我想合并确认后发布,但是花了一点时间,所以我分享一下解决方案。
它以有关缺少 ZipArchive 的错误开始。
当我合并并运行它时,出现以下错误:
错误 - 在 APPPATH/classes/logic/monitoring.php 第 721 行中找不到类“ZipArchive”
当然,出现这种情况是因为我没有安装该模块,所以我会尝试安装它。
目前安装的PHP相关模块如下。
$ yum 列表已安装 | grep php php.x86_64 7.1.22-1.el7.remi @remi-php71 php-cli.x86_64 7.1.22-1.el7.remi @remi-php71 php-common.x86_64 7.1.22- 1.el7.remi @remi-php71 php-devel.x86_64 7.1.22-1.el7.remi @remi-php71 php-fpm.x86_64 7.1.22-1.el7.remi @remi-php71 php-gd.x86_64 7.1.22-1.el7.remi @remi-php71 php-json.x86_64 7.1.22-1.el7.remi @remi-php71 php-mbstring.x86_64 7.1.22-1.el7.remi @remi-php71 php -mcrypt.x86_64 7.1.22-1.el7.remi @remi-php71 php-mysqlnd.x86_64 7.1.22-1.el7.remi @remi-php71 php-pdo.x86_64 7.1.22-1.el7.remi @ remi-php71 php-pecl-imagick.x86_64 3.4.3-8.el7.remi.7.1 @remi-php71 php-xml.x86_64 7.1.22-1.el7.remi @remi-php71
当然不是。
让我们检查一下 PHP 正在加载的模块。
$ php -m [PHP 模块] bz2 calendar Core ctype curl date dom exif fileinfo filter ftp gd gettext hash iconv imagick json libxml mbstring mcrypt mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline 反射会话 SimpleXML 套接字 SPL sqlite3 标准标记器 wddx xml xmlreader xmlwriter xsl # 应该在这附近 zlib
并不真地。
那么,让我们使用 yum 快速安装它。
尝试使用 yum 安装 php-pecl-zip
由于PHP是使用yum准备的,所以这次我们将再次使用yum安装它。
$ yum install –enablerepo=remi-php71 php-pecl-zip 加载的插件:fastestmirror 从缓存的主机文件加载镜像速度 * 基础:ftp.jaist.ac.jp * epel:mirrors.kernel.org * 附加:ftp.jaist.ac .jp * remi-safe:ftp.riken.jp * 更新:ftp.jaist.ac.jp 已安装与 php-common-5.4.16-45.el7.x86_64 匹配的软件包。
你以一种奇怪的方式生气了。
我使用的PHP版本是7.1,所以很奇怪我无法安装它,因为php-common-5.4。
既然是PECL模块,我们就尝试直接编译它。
尝试编译PECL模块
源代码是从PECL::Package::zip
$ phpize 配置: PHP Api 版本:20160303 Zend 模块 Api 编号:20160303 Zend 扩展 Api 编号:320160303 $ ./configure 检查处理长行的 grep 和 -e... /bin/grep 检查 egrep.../ bin/grep -E 检查不截断输出的 sed... /bin/sed 检查 cc... cc 检查 C 编译器是否工作... 是 检查 C 编译器默认输出文件名... a .out 检查可执行文件的后缀...检查我们是否正在交叉编译...不检查目标文件的后缀...o 检查我们是否正在使用 GNU C 编译器...是检查 cc 是否接受 -g。 .. 是检查 cc 选项以接受 ISO C89...不需要检查如何运行 C 预处理器... cc -E 检查 icc...不检查 suncc...不检查 cc 是否理解 -c 和-o 一起...是检查系统库目录...lib 检查编译器是否支持 -R...不检查编译器是否支持 -Wl,-rpath,...是检查构建系统类型...x86_64-unknown -linux-gnu 检查主机系统类型... x86_64-unknown-linux-gnu 检查目标系统类型... x86_64-unknown-linux-gnu 检查 PHP 前缀... /usr 检查 PHP 包括... -I /usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr /include/php/ext/date/lib 检查 PHP 扩展目录... /usr/lib64/php/modules 检查 PHP 安装的标头前缀... /usr/include/php 检查是否启用了调试... 否检查 zts 是否已启用...不检查 re2c...不配置:警告:如果要重新生成 PHP 解析器,则需要 re2c 0.13.4 或更高版本检查 gawk...gawk 检查 zip 存档读取/ writesupport...是的,共享检查 libzip...是的检查 PHP 版本... PHP 7.0 - 7.2 检查 pkg-config... /bin/pkg-config 检查 libzip... 配置:错误:系统 libzip 必须升级到版本 >= 0.11
我很生气,因为 libzip 版本很低。
还有一种方法可以增加libzip的版本,但是我不希望它影响各种事情,所以我做了一点研究。
没有太多信息。
关于安装PHP的文章不少,但是说到php-pecl-zip,文章数量突然减少了。即使范围扩大到英语,这种情况可能仍然是罕见的。
毕竟不是很好吃吗?怀疑
让我们稍微改变一下想法,回到基础,看看 yum 的结果。
当我用yum安装时,由于php-commom导致安装停止,那么是不是可以绕过这个呢?我想。
$ yum install --enablerepo=remi-php71 php-pecl-zip --exclude=php-common 加载的插件:fastestmirror 从缓存的主机文件加载镜像速度 * base: ftp.jaist.ac.jp * epel:mirrors.kernel.org * 额外:ftp.jaist.ac.jp * remi-php71:ftp.riken.jp * remi-safe:ftp.riken.jp * 更新:ftp.jaist.ac.jp 解决依赖关系 --> 运行事务检查 -- -> 将安装软件包 php-pecl-zip.x86_64 0:1.15.3-1.el7.remi.7.1 --> 处理依赖项:libzip5(x86-64) >= 1.5.1 for package: php-pecl- zip-1.15.3-1.el7.remi.7.1.x86_64 --> 处理依赖项:libzip.so.5()(64位),用于包:php-pecl-zip-1.15.3-1.el7.remi。 7.1.x86_64 --> 运行事务检查 ---> 将安装软件包 libzip5.x86_64 0:1.5.1-1.el7.remi --> 完成依赖项解析 依赖项已解决 =========== =================================================== =================================================== ==== 包 Arch 版本存储库大小 ============================================= =================================================== ======================== 安装: php-pecl-zip x86_64 1.15.3-1.el7.remi.7.1 remi-php71 51 k 安装依赖项: libzip5 x86_64 1.5.1-1.el7.remi remi-safe 55 k 事务摘要 ================================ =================================================== ====================================== 安装1个包(+1个依赖包) 总下载大小:107 k 安装大小: 280 k 这样可以吗 [y/d/N]: y 下载软件包: (1/2): php-pecl-zip-1.15.3-1.el7.remi.7.1.x86_64.rpm | 51 kB 00:00:00 (2/2): libzip5-1.5.1-1.el7.remi.x86_64.rpm | 55 kB 00:00:00 -------------- - ------------------------------------------------- - -------------------------------------------------总计 214 kB/s | 107 kB 00:00:00 运行事务检查 运行事务测试 事务测试成功 运行事务 安装:libzip5-1.5.1-1.el7.remi.x86_64 1/2 安装:php-pecl-zip- 1.15 .3-1.el7.remi.7.1.x86_64 2/2 验证:libzip5-1.5.1-1.el7.remi.x86_64 1/2 验证:php-pecl-zip-1.15.3-1.el7。 remi .7.1.x86_64 2/2 安装:php-pecl-zip.x86_64 0:1.15.3-1.el7.remi.7.1 安装依赖项:libzip5.x86_64 0:1.5.1-1.el7.remi 完成!
看来由于依赖解析安装了新的libzip,但是php-pecl-zip安装成功了!
它有一个不同的名称,libzip5,所以应该没有问题!
概括
在 CentOS 上,标准 yum 存储库中注册的 PHP 仍然是 5 系列,因此我想对此做一些事情,但通过使用 --exclude 选项排除 php-common,可以避免不必要的依赖关系解析。安装它没有任何问题。
Yum 相当不错,所以这种情况并不常见。
使用 PHP 执行 zip 压缩时,您可能需要注意 PHP 版本。
就是这样。