centos下的php程序中报错:Class 'ZipArchive' not found 的解决方法

本文详细介绍了在Centos系统下安装和配置PHP的Zip模块以解决“Class'ZipArchive'notfound”异常的过程。包括下载安装包、编译配置、安装libzip及修改php.ini等关键步骤。

今天在Centos系统下编写导入EXCEL文件时,抛出“Class 'ZipArchive' not found“ 的异常。而我在本地的windows下的代码则是运行正常的。

形成原因:在Centos也就是linux下并没有php_zip.dll这个文件(我不会告诉你即使有也并不会起作用~),所以需要重新编译一下php的zip模块。

 

安装zip具体步骤如下:

1.进入存放下载文件目录

cd usr/src

2.下载安装包

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

3.进行解压

tar zxvf 包名

4.接入解压后的文件夹

cd zip-1.x

5.此时应该是不可以直接./configure的  所以需要先执行以下phpize,这里需要根据自己当前php版本安装的phpize的文件地址来执行

我的执行代码是:/usr/local/php/bin/phpize

6.然后就可以进行./configure编译了,此处需要注意的是,--with-php-config后面对应的路径是当前php版本的php-config所在文件路径  还有一点 这里编译的时候可能会报php-config路径不正确的错误  这是./cofigure 的操作权限问题  将php-config文件设置可写即可解决

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install(安装完之后,会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so)

 

到这里,你是不是你已经大功告成了?如果过程没有任何报错,那么恭喜你,确实是大功告成了,但是,小威在安装编译的时候发现报错缺少libzip,所以,这里我们还得继续先安装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

 

注意:此处完成后,我们还需要修改php.ini文件(通常可能会在/etc/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看)。

增加:extension = 安装zip成功后的路径/zip.so

同时修改:zlib.output_compression = On 

 

最后,千万别忘了重启nginx服务哟~

function downloadRemoteFile($remoteUrl, $localPath) { try { // 初始化cURL会话 $ch = curl_init($remoteUrl); // 设置cURL选项 curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, // 返回内容作为字符串 CURLOPT_FOLLOWLOCATION => true, // 跟随重定向 CURLOPT_MAXREDIRS => 5, // 最大重定向次数 CURLOPT_CONNECTTIMEOUT => 15, // 连接超时(秒) CURLOPT_TIMEOUT => 30, // 执行超时(秒) CURLOPT_SSL_VERIFYPEER => false, // 禁用SSL验证(仅测试环境) CURLOPT_FAILONERROR => true, // 400+状态码视为错误 CURLOPT_HEADER => true, // 包含响应头 CURLOPT_NOBODY => false // 包含响应体 ]); // echo $ch; // 执行请求 $response = curl_exec($ch); // 检查cURL错误 if (curl_errno($ch)) { throw new Exception('cURL错误: ' . curl_error($ch)); } // 获取HTTP状态码 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize); // 关闭cURL资源 curl_close($ch); // 处理HTTP状态码 if ($httpCode >= 400) { switch ($httpCode) { case 404: throw new Exception("远程文件不存在(404)"); case 403: throw new Exception("访问被拒绝(403)"); case 500: throw new Exception("服务器内部错误(500)"); default: throw new Exception("HTTP错误: $httpCode"); } } // 保存文件内容 if (file_put_contents($localPath, $body) === false) { throw new Exception("无法写入本地文件: $localPath"); } // 验证文件大小 $expectedSize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); $actualSize = filesize($localPath); if ($actualSize != $expectedSize) { unlink($localPath); // 删除不完整的文件 throw new Exception("文件大小不匹配: 预期 {$expectedSize}字节, 实际 {$actualSize}字节"); } return true; } catch (Exception $e) { // 错误日志记录 error_log("[".date('Y-m-d H:i:s')."] 下载失败: " . $e->getMessage()); return false; } } // 解压ZIP文件 function unzipFile($zipPath, $extractTo, $password = null) { // 验证文件存在 if (!file_exists($zipPath)) { throw new InvalidArgumentException("ZIP文件不存在: $zipPath"); } // 创建解压目录 if (!is_dir($extractTo) && !mkdir($extractTo, 0755, true)) { throw new RuntimeException("无法创建解压目录: $extractTo"); } $zip = new ZipArchive(); $flags = ZipArchive::CHECKCONS; // 尝试打开ZIP文件 if ($zip->open($zipPath, $flags) !== true) { throw new RuntimeException("无法打开ZIP文件: " . $zip->getStatusString()); } // 处理加密ZIP if ($password !== null) { if (!$zip->setPassword($password)) { $zip->close(); throw new RuntimeException("无法设置解压密码"); } } // 执行解压 if (!$zip->extractTo($extractTo)) { $error = $zip->getStatusString(); $zip->close(); throw new RuntimeException("解压失败: $error"); } $zip->close(); return true; } // 处理解压后的文件 function processExtractedFiles($directory, $callback) { if (!is_dir($directory)) { throw new InvalidArgumentException("目录不存在: $directory"); } $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST ); $results = []; foreach ($iterator as $file) { if ($file->isFile()) { $results[] = call_user_func($callback, $file->getPathname()); } } return $results; } $remoteUrl = 'http://10.69.5.114:8088/Tool-IT/自动排产系统1.5.4.zip'; $remoteUrlEncoded = urlencode($remoteUrl); $localFile = __DIR__ . '/' . $response['data']['filename']; // 1. 下载远程ZIP文件 echo "开始下载文件...\n"; if (downloadRemoteFile($remoteUrl, $localFile)) { echo "文件下载成功!"; // 后续解压操作 $zip = new ZipArchive; if ($zip->open($localFile) === TRUE) { $zip->extractTo(__DIR__); $zip->close(); echo "解压完成!"; } else { echo "ZIP文件解压失败"; } } else { echo "文件下载失败,请检查错误日志"; } echo "\n下载完成! 文件保存至: $localZip\n\n";开始下载文件... 文件下载成功!<br /> <b>Fatal error</b>: Uncaught Error: Class "ZipArchive" not found in D:\laragon\www\version.php:190 Stack trace: #0 {main} thrown in <b>D:\laragon\www\version.php</b> on line <b>190</b><br />
最新发布
08-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值