无法提取使用 php 生成的 zip 文件
Posted
技术标签:
【中文标题】无法提取使用 php 生成的 zip 文件【英文标题】:Unable to extract zip file which generated using php 【发布时间】:2017-11-16 11:09:37 【问题描述】:我已经编写了 php 脚本来生成 zip 文件。当我使用 rar 软件提取它但没有使用 rar 软件提取它时,它工作正常。我不能要求用户安装 rar 软件来提取下载的 zip 文件。
我不知道我在哪里犯了错误。 在这里,我附上了尝试打开 zip 文件时得到的错误屏幕截图。
// Here is code snippet
$obj->create_zip($files_to_zip, $dir . '/download.zip');
// Code for create_zip function
//create the archive
$zip = new ZipArchive();
if ($zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true)
return false;
//add the files
foreach ($valid_files as $file)
$filearr = explode('/', $file);
$zip->addFile($file, end($filearr));
$zip->close();
【问题讨论】:
【参考方案1】:如果 $valid_files 是一个全局数组,使用 basename() 而不是 end(),你的 zip 可能实际上没有添加任何文件,导致它是一个无效的 zip(但是这在zip 文件)。
也可以试试 winrar/winzip/7zip 看看它们返回什么,微软的内部 zip 引擎可能不是最新的,无法打开 zip。
【讨论】:
谢谢,我刚刚从页面顶部和 html 中删除了空格,它运行良好。【参考方案2】:我也遇到过这个问题,使用 7z 解决了这个问题,但我们需要将 zip 发送给其他人,所以 7z 是 nono。
我发现,在我的情况下是文件路径太长:
当我使用这个时:
$zip->addFile($files_path.'/people.txt');
它生成了一个嵌套非常深的 zip 文件夹,例如["/tmp/something/something1/something2/people.txt"]
所以我需要改用这个
$zip->addFile($files_path.'/people.txt', 'people.txt');
其中生成了一个只有1层的zip文件夹[“people.txt”],Windows Zip读取完美~
希望这对同样有此问题的人有所帮助!
【讨论】:
谢谢。刚刚遇到了同样的问题,有人指出我在这里。以上是关于无法提取使用 php 生成的 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章