更快的fopen或file_get_contents?

时间:2011-10-18 11:33:59

标签: php fopen file-get-contents

我正在运行多个流量较高的网站,但要求所有图片都是通过image.php?id=IMAGE_ID_HERE下载的。 如果您以前曾经这样做过,那么您知道该文件将读取文件图像并使用特殊标题将其回显到浏览器。

我的问题是,服务器上的负载非常高(150-200)并且TOP命令显示了image.php的多个实例,因此image.php运行缓慢!

问题可能是fopen在将图像发送到客户端之前将图像加载到内存中。如何读取文件并直接传递?

谢谢你们


更新

优化代码后,尽可能使用缓存,创建CDN。几个服务器,同步方法,负载平衡器,不再需要担心请求:))

2 个答案:

答案 0 :(得分:16)

fopen和file_get_contents几乎相同

加快你可以使用的页面加载的一致性

http://www.php.net/fpassthru

或者,甚至更好

http://www.php.net/readfile

使用这些函数,文件内容直接打印,每字节字节

而不是file_get_contents,例如,您将整个数据存储在变量中

$var = file_get_contents();

所以,为了使这些工作正常,你需要在提供图像的页面中禁用输出缓冲(否则会使readfile()无意义)

希望这有帮助!

答案 1 :(得分:4)

为什么不用apc缓存图像内容?

if(!apc_exists('img_'.$id)){
    apc_store('img_'.$id,file_get_content(...));
}

echo apc_fetch('img_'.$id);

这样就不会多次从磁盘读取图像内容。