PHP下载/流文件到浏览器 - 最大执行超时错误

时间:2015-01-28 15:48:42

标签: php download file-read

情况:我们在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/

0 个答案:

没有答案