我有以下代码可以在WinRAR的Windows上正常工作,并且在Mac上工作正常。但是,出于某种原因,当您使用默认的Windows资源管理器打开它时,zip显示为空,当您右键单击并提取时,它表示它无效。当用winrar或mac打开同一个文件时,所有文件都在那里。有什么想法吗?
$passcode = $_GET['passcode'];
$zip = new ZipArchive;
$download = 'download_files_'.$passcode.'.zip';
$zip->open($download, ZipArchive::CREATE);
foreach (glob("../dashboard/uploads/".$passcode."/*.jpg") as $file) { /* Add appropriate path to read content of zip */
$zip->addFile($file);
}
$zip->close();
header('Content-Type: application/zip');
header("Content-Disposition: attachment; filename = $download");
header('Content-Length: ' . filesize($download));
header("Location: $download");
答案 0 :(得分:1)
您可以使用以下方法解决此问题。
foreach (glob("../dashboard/uploads/".$passcode."/*.jpg") as $file) {
$zip->addFile(realpath($file), pathinfo($file, PATHINFO_BASENAME));
}
我希望这会对你有所帮助。
答案 1 :(得分:0)
使用以下方法可以轻松解决这个问题:我必须将生成的zip文件移动到uploads文件夹中并删除../dashboard/uploads/
,因为这条路径导致Windows将其视为损坏的文件
答案 2 :(得分:0)
只是我的0.02美元 - Windows文件管理器不喜欢,如果ZIP存档中的文件存储有前导分隔符。
这不起作用:
$zip->addFile(realpath($file), '/mydir/myfile.txt');
这有效:
$zip->addFile(realpath($file), 'mydir/myfile.txt');