我编写了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();
答案 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读起来很完美〜
希望这对也有此问题的人有所帮助!