php下载带有readfile的文件,然后删除问题

时间:2011-02-22 11:30:03

标签: php download

您好我使用以下脚本使用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);功能,但这不解决问题。 任何人都可以为此提出解决方案吗?

3 个答案:

答案 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之前