无法提取使用php生成的zip文件

时间:2017-11-16 11:09:37

标签: php zip archive ziparchive

我编写了PHP脚本来生成zip文件。当我使用rar软件提取它但没有使用rar软件提取时,它工作正常。我不能要求用户安装rar软件来提取下载的zip文件。

我不知道我在哪里犯错误。 这里我附加了错误屏幕截图,我试图打开zip文件时得到。 Opening zip file without using any software

// 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();

2 个答案:

答案 0 :(得分:1)

如果$ valid_files是一个glob< d'd数组,使用basename()而不是end(),你的zip实际上可能没有添加任何文件导致它成为无效的zip(但是在zip文件的大小)。

还可以尝试使用winrar / winzip / 7zip看看他们返回的内容,微软的内部拉链引擎可能不是最新的,无法打开拉链。

答案 1 :(得分:0)

我也遇到了这个问题,使用 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层[“ people.txt”]的zip文件夹,并且Windows Zip读起来很完美〜

希望这对也有此问题的人有所帮助!