表现非常糟糕
问题描述:
我编写了一个名为“的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,但它只是提高性能。
答
fpassthru($ FD)是一种更有效的方式来流的内容传递给PHP://输出而不加载整个文件的内容到内存
取而代之的阅读和在一个循环输出块,尝试简单地使用readfile。 – CBroe
@CBroe readfile会比fread好消耗643ms然后echo,但是仍然很长,而且readfile不支持部分下载,请问有没有更好的方法? – yuanjianpeng
消耗什么......? – CBroe