You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP ZipArchive类无法解压Deflate64压缩ZIP文件的解决方案问询

解决PHP ZipArchive无法提取Deflate64压缩ZIP文件的问题

问题根源

PHP的ZipArchive类依赖底层的libzip库,而libzip默认未启用Deflate64压缩算法支持,这就是ZipArchive::isCompressionMethodSupported(ZipArchive::CM_DEFLATE64)返回false、解压失败的核心原因。


解决方案

1. 重新编译libzip与PHP Zip扩展(服务器层面)

若拥有服务器权限,可通过重新编译组件开启Deflate64支持:

  • 下载libzip源码,编译时添加--enable-deflate64参数:
    ./configure --enable-deflate64
    make && make install
    
  • 重新编译PHP的zip扩展,确保链接到新编译的libzip:
    pecl uninstall zip
    pecl install zip
    
  • 重启PHP服务后,再次检测ZipArchive::isCompressionMethodSupported(ZipArchive::CM_DEFLATE64)应返回true,原有解压代码即可正常运行。

2. 调用外部命令行工具解压(无需服务器编译)

若无服务器权限,可通过PHP调用系统解压工具(如7z或支持Deflate64的unzip)处理压缩包:
示例代码:

// 使用7z解压
$zipPath = 'deflate64.zip';
$extractDir = '/tmp/test_extract';
$command = "7z x {$zipPath} -o{$extractDir} -y";
exec($command, $output, $returnVar);

if ($returnVar === 0) {
    echo '解压成功';
} else {
    echo '解压失败: ' . implode(PHP_EOL, $output);
}

// 或使用支持Deflate64的unzip工具
$command = "unzip {$zipPath} -d {$extractDir}";
exec($command, $output, $returnVar);

注意:需确保服务器已安装对应工具,且PHP的exec/shell_exec函数未被禁用。

3. 使用第三方PHP库

部分纯PHP实现的ZIP处理库原生支持Deflate64,比如PhpZip:
先通过Composer安装:

composer require nelexa/zip

再使用库解压:

use Nelexa\Zip\ZipFile;

$zipFile = new ZipFile('deflate64.zip');
$zipFile->extractTo('/tmp/test_extract');
$zipFile->close();

该库不依赖系统libzip,兼容性更强。


内容的提问来源于stack exchange,提问作者atmacola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:04:51