Php 更快的打印或文件获取内容?

Php 更快的打印或文件获取内容?,php,fopen,file-get-contents,Php,Fopen,File Get Contents,我正在运行多个流量高的网站,根据要求,所有图像都是通过image.php?id=image\u id\u此处下载的。 如果您以前这样做过,您就知道该文件将读取文件图像并使用特殊的标题将其回送到浏览器 我的问题是,服务器上的负载非常高(150-200),TOP命令显示image.php的多个实例,因此image.php运行缓慢 问题可能是fopen在将图像发送到客户端之前将其加载到内存中。如何读取文件并直接传递 谢谢你们 更新 优化代码后,尽可能使用缓存,创建CDN。两台服务器、同步方法、负载平

我正在运行多个流量高的网站,根据要求,所有图像都是通过
image.php?id=image\u id\u此处下载的。
如果您以前这样做过,您就知道该文件将读取文件图像并使用特殊的标题将其回送到浏览器

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

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

谢谢你们


更新


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

fopen和file\u get\u内容几乎是等价的

为了提高页面加载的一致性,可以使用

或者,甚至更好

有了这些函数,文件的内容就可以直接打印,以字节为单位

例如,与file_get_内容相反,您将整个数据存储在一个变量中

$var = file_get_contents();
因此,要使这些功能正常工作,您需要在为图像提供服务的页面中禁用输出缓冲(否则会使readfile()无意义)


希望这有帮助

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

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

echo apc_fetch('img_'.$id);

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

文件获取内容有什么问题?或者为什么不直接使用
fphassthru
readfile
?如果这只是自定义标题,请考虑使用<代码> MODE CelnyMeta < /COD>或<代码> MODYHealths。对于所有询问FNA(或)FNB()是否更快的问题:只对代码进行配置。它会给你答案,你很可能会发现其他东西在拖你的后腿。@Gordon,假设你已经检查了所有的代码,优化了所有的东西,去掉了其他的东西,直到什么都没有发生?为什么不在Apache或Nginx conf文件中实现特殊的头文件,并直接从文件中提供图像呢?没有任何解决方案会触及PHP处理器。@RonanDejhero不确定你想说什么,但无论如何,分析是一种方法,而不是要求合成a()和b()。让我猜你没有一个顶部填充image.PHP,也没有。我会尝试,希望负载下降:)@RonanDejhero是的,不要使用fopen或file_get_contents,尝试使用fpassthru一周并监视服务器负载。如果使用fpassthru后,服务器负载仍有问题,并且您能够安装apache模块,则可以尝试mod_xsendfile查看此链接以了解更多信息apc难以正确安装。但这可能是一个很好的解决方案!好吧,如果网站的点击率比磁盘上的I/O高,这是由于文件内容的一致性,那么将内容存储在ram中就可以摆脱that@Col.Shrapnel从内存读取比从磁盘读取快。问题中没有I/O峰值的迹象。想想看。它清楚地表明CPU利用率超过了限制。根据我的经验,大量的I/O对负载性能从来没有好处。如果这个家伙在这个特定的脚本上有200个负载,那么由于文件的服务方式,他就有高IO。我不是说这会解决他的问题,但在我看来值得一试。