您好我使用以下脚本使用php下载文件:
$archive = tempnam("//somepath/mms_1/MMS_SERVICE/","asset");
$zipobject = new ZipArchive();
$zipobject->open($archive, ZIPARCHIVE::CREATE);
$zipobject->addFile('somefile', '');
......
$zipobject->close();
$filesize = filesize($archive);
$timestamp=date('d-m-y_H-i');
header("Content-type: application/x-zip-compressed");
header("Content-Disposition: attachment; filename=Assets_$timestamp.zip ");
header("Content-Description: Download PHP");
header("Content-Length: filesize ");
header("Content-Transfer-Encoding: binary");
readfile_chunked($archive);
unlink($archive);
问题是php在完成下载或用户中止下载或离开页面时不删除临时zip文件。在这种情况下,unlink似乎永远不会执行ignore_user_abort(true);功能,但这不解决问题。 任何人都可以为此提出解决方案吗?
答案 0 :(得分:0)
尝试在php中使用register-shutdown调用让您的清理功能始终运行。
答案 1 :(得分:0)
$filesize = filesize($archive);
$timestamp=date('d-m-y_H-i');
header("Content-type: application/x-zip-compressed");
header("Content-Disposition: attachment;
filename=Assets_$timestamp.zip ");
header("Content-Description: Download PHP");
header("Content-Length:" **.$filesize** );
header("Content-Transfer-Encoding: binary");
if ($archive != ''){
$fileData = @file_get_contents($archive);
echo $fileData;
unlink($archive);
}
尝试上面的建议。我没有尝试过您的版本,但这对我有用,因此除非存在任何访问问题,它也适用于您。 (我用粗体(双星)标记了我从你的版本改变的代码)
答案 2 :(得分:0)
你在哪里指定了ignore_user_abort(true); ? 它需要在readfile之前