我有一个脚本来创建.zip并从我的Apache服务器下载。 zip已创建并下载。
但是,尝试在文件资源管理器中提取时,zip显示为无效,但在Macbook pro上可以完美运行,并且如果我使用的Winrar与Windows本机压缩软件(文件资源管理器)相对,则也可以使用。
我尝试排除故障并在Stack Overflow上发帖。尝试更改http标头。
<?php
if (ob_get_level()) ob_end_clean();
// Create ZIP file
if(isset($_POST['create'])){
$zip = new ZipArchive();
$filename = "./myzipfile.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$dir = '../uploads/graeme_upload/';
// Create zip
createZip($zip,$dir);
$zip->close();
}
// Create zip
function createZip($zip,$dir){
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
// If file
if (is_file($dir.$file)) {
if($file != '' && $file != '.' && $file != '..'){
$zip->addFile($dir.$file);
}
}else{
// If directory
if(is_dir($dir.$file) ){
if($file != '' && $file != '.' && $file != '..'){
// Add empty directory
$zip->addEmptyDir($dir.$file);
$folder = $dir.$file.'/';
// Read data of the folder
createZip($zip,$folder);
}
}
}
}
closedir($dh);
}
}
}
// Download Created Zip file
ob_start();
if(isset($_POST['download'])){
$filename = "myzipfile.zip";
if (file_exists($filename)) {
$quoted_filename = basename(addcslashes($filename, "\0..\37\"\177"));
header("Content-Disposition: attachment; filename=\"{$quoted_filename}\"");
header('Content-Type: application/zip');
header("Content-Transfer-Encoding: Binary");
header('Content-Length: '.filesize($filename));
readfile($filename);
}
}?>
预期结果:有效的已下载.zip文件夹。