我运行这个PHP脚本,允许用户以zip格式下载图像文件夹,这意味着创建zip并将其发送给用户,然后将其从服务器中删除。它工作正常,但有时它不会删除zip。有什么想法吗?
$filename_no_ext=$_GET['zip'];
// we deliver a zip file
header("Content-Type: archive/zip");
// filename for the browser to save the zip file
header("Content-Disposition: attachment; filename=$filename_no_ext".".zip");
// get a tmp name for the .zip
$tmp_zip = tempnam ("tmp", "tempname") . ".zip";
// zip the stuff (dir and all in there) into the tmp_zip file
`zip -r $tmp_zip $filename_no_ext`;
// calc the length of the zip. it is needed for the progress bar of the browser
$filesize = filesize($tmp_zip);
header("Content-Length: $filesize");
// deliver the zip file
$fp = fopen("$tmp_zip","r");
echo fpassthru($fp);
fclose($fp);
// clean up the tmp zip file
//`rm $tmp_zip `;
unlink($tmp_zip);
//If user aborts check they have and then clean up the zip
ignore_user_abort(true);
echo "\n";
if (connection_status()!=0){
unlink($tmp_zip);
}
if (connection_aborted()) {
unlink($tmp_zip);
}
任何帮助都会很棒。
答案 0 :(得分:0)
我相信当主机通过“强制”中断连接时会发生这种情况。脚本未完成解析,因此unlink()
不会发生。我以前遇到过这个问题所以你不能依赖你的脚本删除文件。
您有多种解决方案。 您可以设置数据库并在其中保存下载信息,并创建一个cron任务来删除临时zip。
你也可以制作一个cron并检查filemtime()
并删除是否超过1天。
最后一个选项是我的方法,但我对它进行了一些调整,并以另一个用户无法使用相同下载链接的方式进行了一些下载会话。
您可以将unlink()
与cron任务合并。