PHP file_get_contents($ url)性能下降

时间:2009-04-09 17:07:00

标签: php

我的网页使用Google图表生成五个图表。如果图形尚未缓存,我有以下代码行来检索图像。

$ image = file_get_contents(“http://chart.apis.google.com/chart?”。$ query);

当代码在循环中执行时,每个图像需要10秒钟。但是,如果我更改代码使用Google的IP地址而不是网址:

$ image = file_get_contents(“http://74.125.93.100/chart?”。$ query);

检索图像只需不到一秒钟。所以我最初的想法是DNS没有解析URL,延迟是通过指定的DNS服务器循环?所以我尝试从服务器ping map.apis.google.com,它立即返回了合理的回复。

所以我的问题是:是否有任何我可能忽略的PHP(或Apache2)配置设置可能导致此延迟,或者这听起来像服务器配置问题?

4 个答案:

答案 0 :(得分:7)

您的DNS解析速度很慢(您的服务器使用的DNS可能是一个问题,然后大多数其他域可能很慢),或者您的服务器在使用DNS缓存时遇到问题。

在任何情况下,如果您没有特定的理由来操纵从谷歌图表收到的图像,为什么不将它打印为img标签?如果需要,您可以使用css覆盖文本或透明png-s。

答案 1 :(得分:4)

在这里遇到同样的问题。它可能是一个DNS问题......也许是apache服务器 使用速度太慢的DNS服务器。

我尝试了不同的方法:CURL,WGET(shell exec)......并且仍然遇到了相同的性能问题。

我的生产服务器大约需要15秒。但是在我的本地服务器(使用IP)上使用我的脚本只需不到1.5秒。

试试/etc/resolv.conf或/etc/named.conf?也许。我正在努力寻找解决方案。

答案 2 :(得分:2)

这是与您的托管服务提供商放入/etc/resolv.conf的IP相关的问题。你无法修复它。这是您的托管服务提供商的问题。

但您可以使用google public dns:8.8.8.8。打开/etc/resolv.conf,然后删除所有数据并写入:

nameserver 8.8.8.8

然后保存。重启dns和apache。然后再试一次。

答案 3 :(得分:1)

为什么不在开始加载图像之前解析ip?

$ip = gethostbyname($name);
$image = file_get_contents($ip."/chart?".$query);