[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

关于使用 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 版本。

就是这样。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
14,960
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。