PHP文件下载 - 最大执行时间随机发生

时间:2015-09-21 08:04:50

标签: php download file-handling execution-time

我的文件下载似乎有问题。我的日志显示错误“超过60秒的最大执行时间”但请求的文件只是一个只有1.64 KB的小css文件。所以它不应该花费60秒来传递,不幸的是错误不是完全可重复的。如果我打开网址它可以很好地工作,但我的错误日志显示在其他客户端上多次发生错误(随机?)。我的代码中有错误吗?

// this code is from: http://www.richnetapps.com/the-right-way-to-handle-file-downloads-in-php/
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: -1"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); // browser must download file from server instead of cache
if(substr($filename, -4) == ".css")
{
    $mimeType = "text/css";
}
header("Content-Type: ".$mimeType);
header("Content-length: ".$filesize);

$filehandle = fopen($filename, "rb");
// large file handling:
while(!feof($filehandle))
{
    print(@fread($filehandle, 1024*8));
    ob_flush();
    flush();
    if(connection_status() != 0)
    {
        @fclose($filehandle);
        unlink($filename);
        exit;
    }
}
@fclose($filehandle);
unlink($filename);
exit;

错误行总是在while循环中,但它并不总是相同的行。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

为什么所有这些OB都会为简单的CSS输出而烦恼?我确定它的连接状态检查会导致您的请求有时挂起。

if(connection_status() != 0)  // that specifically

为什么你甚至需要它?你可以简单地做

header("Pragma: public");
header("Expires: -1"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: text/css");
header("Content-length: ".$filesize);
readfile($filename);