2009-04-09 130 views
6

我的网页使用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 ping.apis.google.com,并立即返回合理的响应。

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

+0

如果使用另一种方法检索图像(如cURL)会怎么样? – Matt 2009-04-09 17:14:43

+0

哪个版本的PHP?任何机会,你可以升级到最新,看看是否可以解决问题? – 2009-04-09 19:41:10

+0

我会做一些测试,看看DNS是否真的是问题。您可以将您的API调用包装在一个定时块中。 – 2009-04-10 00:40:58

回答

1

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

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

你的DNS解析速度很慢(你的服务器使用的DNS可以是broblem,那么大多数其他领域可能会很慢),或者你的服务器使用DNS缓存出现了问题。

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

4

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

我已经尝试过不同的方式:CURL,WGET(shell exec)...并且仍然有相同的性能问题。

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

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

2

这是一个与您的托管服务提供商在IP地址为/etc/resolv.conf的IP相关的问题。你无法修复它。这是您的托管服务提供商的问题。

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

nameserver 8.8.8.8 

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