防止 zip 存档在两个不同的文件夹中下载两次
prevent zip archive download twice in two different folder
我尝试使用 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;
}
}
下载完成后,您可以删除服务器上的文件:
(...)
ob_end_clean();
//flush();
readfile( $archive_file_name );
unlink( $archive_file_name );
(...)
您的 PHP 脚本在本地目录中创建 zip,这是您的 htdocs 目录。
您现在有几个选择:
- 使用 php (
readfile
) 读取存档后删除 zip 存档
- 在子目录中创建 zip 存档,如果您需要保存它供以后使用(存档)
- 在临时文件夹中创建 zip,使用后删除 zip
我会选择选项 3,因为它将确保如果脚本在能够删除之前死掉,zip 将被删除。
您可以使用unlink()
命令删除文件。您只需将文件名或文件路径传递给它,它就会执行(如果文件存在)。如果要将其保存在子目录中,只需在文件名前加上目录名和目录分隔符。如果你想保存它,例如在子目录 'downloads' 中,您只需在文件名前添加 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);
。
函数参考:
我尝试使用 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;
}
}
下载完成后,您可以删除服务器上的文件:
(...)
ob_end_clean();
//flush();
readfile( $archive_file_name );
unlink( $archive_file_name );
(...)
您的 PHP 脚本在本地目录中创建 zip,这是您的 htdocs 目录。
您现在有几个选择:
- 使用 php (
readfile
) 读取存档后删除 zip 存档
- 在子目录中创建 zip 存档,如果您需要保存它供以后使用(存档)
- 在临时文件夹中创建 zip,使用后删除 zip
我会选择选项 3,因为它将确保如果脚本在能够删除之前死掉,zip 将被删除。
您可以使用unlink()
命令删除文件。您只需将文件名或文件路径传递给它,它就会执行(如果文件存在)。如果要将其保存在子目录中,只需在文件名前加上目录名和目录分隔符。如果你想保存它,例如在子目录 'downloads' 中,您只需在文件名前添加 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);
。
函数参考: