情况:我们在Amazon S3上存储文件并将信息写入我们的数据库。现在,用户可以通过下载链接下载文件,例如www.myserver.de/downloadFile?id=1234
这很有效,但我们得到了几个“超过800秒的最长执行时间”错误。
我们目前的下载代码:
header("Pragma: public");
header("Expires: -1");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
if($mimeType)
{
header("Content-Type: ".$mimeType);
}
else
{
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$filename.";");
}
header("Content-length: ".$filesize);
$s3Client = new s3Client();
//download the file from s3 to local server
$s3Client->getFile($folder, $filename, $tempFolder.$filename);
$filehandle = fopen($tempFolder.$filename, "rb");
while(!feof($filehandle))
{
print(@fread($filehandle, 1024*8));
ob_flush();
flush();
if(connection_status() != 0)
{
@fclose($filehandle);
unlink($tempFolder.$filename);
exit;
}
}
@fclose($filehandle);
unlink($tempFolder.$filename);
exit;
即使文件很小(只有一些KB),也会发生最大执行时间错误。看起来while循环中存在问题并且它不会被终止?
奇怪的是:无论如何下载都有效吗?
当我们在日志中收到超时错误时,我们会自行尝试下载并完美运行。
这种下载文件的方式来源是:http://www.media-division.com/the-right-way-to-handle-file-downloads-in-php/