我有以下代码:
// start downloading
require_once 'classes/class-FlxZipArchive.php';
$filename = 'update_'.time();
$path = 'updates'.DIRECTORY_SEPARATOR.$update;
$zip = new FlxZipArchive;
$zip->open($filename.'.zip',ZipArchive::CREATE);
$zip->addDir($path,basename($path));
$zip->close();
if(file_exists($filename.'.zip')){
header("Content-type: application/zip");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$filename.".zip");
header("Content-length: ".filesize($filename.'.zip'));
header("Pragma: no-cache");
header("Expires: 0");
readfile($filename.'.zip');
unlink($filename.'.zip');
};
exit;
这样可行,但问题是:没有下载zip,而是拉链的解压缩版本。 zip已创建并在服务器上可见,但它会下载解压缩的zip版本。
假设我有files.zip,内容如下:
- folder
- images
- image1.png
- image2.png
- docs
- doc1.docx
- doc2.docx
然后创建了zip,但未已下载。而是下载(解压缩)名为“文件夹”的普通地图。
我的错误在哪里?
我使用以下课程:https://gist.github.com/panslaw/4327882
修改
代码按预期工作,但我使用带有设置的mac来自动下载和提取“保存”文件。更多信息:https://wiki.umbc.edu/pages/viewpage.action?pageId=31919091
答案 0 :(得分:0)
请尝试该代码:
<强> HTML 强>
<div class='container'>
<h1>Create and Download Zip file using PHP</h1>
<form method='post' action=''>
<input type='submit' name='create' value='Create Zip' />
<input type='submit' name='download' value='Download' />
</form>
</div>
<强>腓强>
我在项目中创建了包含文件夹,其中存储了一些文件和文件夹。
创建Zip
为Zip文件创建创建ZipArchive Class对象。定义一个函数createZip()以从指定的目录路径中读取文件和目录。
如果文件
如果读取值是文件,则使用addFile()方法将其添加到zip对象。
如果目录
如果值是directory,则创建一个空目录并调用createZip()函数,其中传递目录路径。
下载Zip
检查zip文件是否存在。如果存在,则下载并从服务器中删除它。
<?php
// 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 = 'includes/';
// 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
if(isset($_POST['download'])){
$filename = "myzipfile.zip";
if (file_exists($filename)) {
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Length: ' . filesize($filename));
flush();
readfile($filename);
// delete file
unlink($filename);
}
}
?>
<强> CSS 强>
.container{
margin: 0 auto;
width: 50%;
text-align: center;
}
input[type=submit]{
border: none;
padding: 7px 15px;
font-size: 16px;
background-color: #00a1a1;
color: white;
font-weight: bold;
}
检查link