2009-04-09 204 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。然後再試一次。