表现非常糟糕

问题描述:

我编写了一个名为“的download.php”到文件推送到客户端PHP脚本,表现非常糟糕

$fd = fopen($path, "rb"); 
if ($fd === false) { 
    echo "404 file not found"; 
    return false; 
} 

Header("Content-type: image/png"); 

while (!feof($fd)) 
{ 
    $buf = fread($fd, 1024); 
    if ($buf === false) { 
     break; 
    } 
    echo $buf; 
} 

fclose($fd); 

当我在铬试验下载一个4M的图像,它会消耗1.4s。 apache服务器在我的电脑上。如果我把图像放在www /中并直接下载,那只会消耗44ms。

我试图增加fread的bufsize,但它只是提高性能。

+0

取而代之的阅读和在一个循环输出块,尝试简单地使用readfile。 – CBroe

+0

@CBroe readfile会比fread好消耗643ms然后echo,但是仍然很长,而且readfile不支持部分下载,请问有没有更好的方法? – yuanjianpeng

+0

消耗什么......? – CBroe

fpassthru($ FD)是一种更有效的方式来流的内容传递给PHP://输出而不加载整个文件的内容到内存