我已经编写了PHP脚本来生成zip文件。当我使用rar软件解压它时,它工作得很好,但不能用rar软件解压。我不能要求用户安装rar软件来解压下载的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();发布于 2017-11-16 19:18:39
如果$valid_files是一个全局数组,使用basename()而不是end(),您的压缩包实际上可能没有添加任何文件,导致它是一个无效的压缩包(但是,这在压缩文件的大小中是可见的)。
同样尝试winrar/winzip/7zip,看看他们返回了什么,微软内部的zip引擎可能不是最新的,无法打开zip。
发布于 2018-10-15 11:30:29
我也遇到过这个问题,使用 7z 解决了这个问题,但我们需要将压缩文件发送给其他人,所以7z是nono。
我发现,在我的例子中,文件路径太长:
当我使用这个的时候使用:
$zip->addFile($files_path.'/people.txt');它生成了一个嵌套非常深的压缩文件夹,例如"/tmp/something/something1/something2/people.txt“
所以我需要用这个来代替
$zip->addFile($files_path.'/people.txt', 'people.txt');其中生成了一个只有1层"people.txt“的压缩文件夹,并且Windows zip读起来很完美~
希望这对同样有这个问题的人有所帮助!
https://stackoverflow.com/questions/47328132
复制相似问题