我尝试使用zip存档创建一个zip文件,虽然zip文件同时在两个不同的文件夹中下载两次,源代码所在的htdocs文件夹和浏览器设置的默认下载文件夹,但它工作正常。有什么方法可以阻止这个吗?我只想将其下载到下载文件夹中一次......
$file_names = explode(',', $_REQUEST['files']);
$dir = $_REQUEST['currentdir'];
//Archive name
$archive_file_name="Downloaded_".date("Y-m-d_G-i-s").".zip";
//Download Files path
$file_path=$dir;
//cal the function
zipFilesAndDownload($file_names,$archive_file_name,$file_path);
function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
{
$zip = new ZipArchive();
$res = $zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE );
if ($res===TRUE) {
//add each files of $file_name array to archive
foreach($file_names as $files)
{
$tt=$file_path."/".$files;
if (file_exists($tt)){
$zip->addFile($tt,$files);
}
else{
return false;
exit;
}
}
$zip->close();
//then send the headers to force download the zip file
header('Content-type: application/zip');
header("Content-Disposition: attachment; filename=\"".basename($archive_file_name)."\"");
header('Pragma: no-cache');
header('Expires: 0');
//header('Content-Length: ' . filesize($archive_file_name));
ob_end_clean();
//flush();
readfile($archive_file_name);
exit;
}
else{
return false;
exit;
}
}
答案 0 :(得分:2)
您的PHP脚本在本地目录中创建zip,这是您的htdocs目录。
您现在有几个选择:
readfile
)我会使用选项3,因为如果脚本在删除之前就会确保删除zip。
您可以使用unlink()
命令删除文件。您只需将文件名或文件路径传递给它,它就会执行它(如果文件存在)。如果要将其保存在子目录中,只需将目录名称与目录分隔符一起添加到文件名中。如果你想保存它,例如在子目录'下载'中,您只需在文件名前添加downloads/
即可。 $archive_file_name="downloads/Downloaded_".date("Y-m-d_G-i-s").".zip";
这里更好的选择是在服务器的临时目录中创建zip并手动将其删除,这样zip就会在完成后立即清理。您将获得服务器的sys_get_temp_dir()
临时目录,您可以在其中添加文件名。完成业务后,您只需使用unlink()
删除该文件即可。
$archive_file_name=sys_get_temp_dir()."Downloaded_".date("Y-m-d_G-i-s").".zip";
完成后您想要删除该文件,只需执行unlink($archive_file_name);
。
功能参考:
答案 1 :(得分:0)
下载后,您可以删除服务器上的文件:
(...)
ob_end_clean();
//flush();
readfile( $archive_file_name );
unlink( $archive_file_name );
(...)