我正在使用ZipArchive类来压缩驻留在服务器上的文件。我可以使用WinRar提取下载的ZIP,但不能使用WinZip提取。如果我通过FileZilla直接从服务器下载创建的ZIP,那么我可以使用Winzip提取它。
请查看我正在使用的以下脚本: -
$zip = new ZipArchive();
//create the file and throw the error if unsuccessful
if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
exit("cannot open <$archive_file_name>\n");
}
//add each files of $file_name array to archive
foreach($file_names as $files) {
$zip->addFile($file_path.$files,$files);
}
$zip->close();
//get the size of the archive
$zipped_size = filesize($archive_file_name);
//set the required headers
header("Content-Description: File Transfer");
//header("Content-type: application/zip");
header("Content-type: application/octet-stream");
header("Cache-Control: public", false);
header("Pragma: public");
header("Expires: 0");
//header("Content-type: application/x-zip-compressed");
//header("Content-Type: application/force-download");// some browsers need this
header("Content-Disposition: attachment; filename=CV-archive.zip");
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: utf-8");
header('Pragma: public');
//header("Content-Length:". "$zipped_size");
ob_clean(); //ob_clean and flush are required to make sure no extra line space is generated before output as it will corrupt the zip archive
flush();
readfile("$archive_file_name");
unlink("$archive_file_name"); // Now delete the temp file (some servers need this option)
foreach($file_names as $files) {
unlink($file_path.$files);
}
exit;
答案 0 :(得分:2)
您的下载脚本正在添加其他输出,可能是<?php
标记之前的空格,也可能是某个包含文件中的?>
标记之后。或者unlink($file_path.$files);
可能会显示警告。
答案 1 :(得分:0)
虽然问题已经两年了,但由于问题不同,我发现了相同的行为。我的档案中的文件格式为&#34; \ 1-SOMFILENAME&#34; ..并且它发生了win rar已经能够提取文件,但Windows Archiver没有。
原来是第一个\转义下一个字符,而windows归档程序无法处理它。