2009-04-09 18 views
6

私のウェブページは、Googleのグラフを使って5つのグラフを作成します。グラフがまだキャッシュされていない場合は、イメージを取得する次のコード行があります。

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

このコードをループで実行すると、各画像を取得するのに10秒かかります。しかし、私はコードのURLの代わりにGoogleのIPアドレスのいずれかを使用するように変更した場合:

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

イメージを取得するのに1秒未満かかりません。だから私の最初の考えは、DNSはURLを解決しておらず、遅延は割り当てられたDNSサーバーを通るサイクリングであるということでしたか?そこで私はサーバーからchart.apis.google.comにpingを試み、すぐに妥当な応答を返しました。

私の質問は、この遅延を引き起こす可能性がある見落としているかもしれないPHP(またはApache2)の設定がありますか、それともサーバー構成の問題のようなものですか?

+0

cURLなどのイメージを取得するために別の方法を使用するとどうなりますか? – Matt

+0

どのバージョンのPHPですか?問題が修正されたかどうかを最新の状態にアップグレードすることはできますか? –

+0

私はDNSが実際に問題であるかどうかを確認するためにいくつかのテストを行っています。 API呼び出しをタイミングブロックでラップすることができます。 –

答えて

1

イメージを読み込む前にipを解決しないのはなぜですか?

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

はい、動作しますが、まだ10秒かかります容認できません。私はconfigの問題を確信していますが、PHP、Apache、またはサーバー設定の問題のように聞こえるかどうかはわかりません。 – Kevin

+0

そのサーバー上で1つのサイトのみがホストされている場合にのみ動作します。マルチサイト環境では、どのサイトがあなたに電話しているのか分かりません。 – Alekc

7

あなたのDNS解決が遅い(サーバーが使用しているDNSは、他のドメインのほとんどが遅くなる可能性があり、broblemことができる)、またはサーバーがDNSキャッシュを使用して問題があります。

いずれにしても、Googleのグラフから受信した画像を操作する特別な理由がない場合は、単にimgタグとして印刷しないでください。必要に応じて、テキストや透明なpng-sをCSSでオーバーレイすることができます。

4

ここで同じ問題が発生しました。 DNSの問題かもしれません。おそらくApacheサーバー が遅すぎるDNSサーバーを使用している可能性があります。

私はCURL、WGET(シェルexec)などの異なる方法を試しましたが、同じパフォーマンスの問題があります。

プロダクションサーバーで約15秒かかります。しかし、私のローカルサーバー(IPを使用している)でスクリプトを実行するのに1.5秒もかかりません。

/etc/resolv.confまたは/etc/named.confを試してみますか?多分。私は解決策を見つけようとしています。

+4

私はあなたと同じ問題を抱えていたようです。私の解決策は、/etc/resolv.confを編集してGoogleのネームサーバー(つまり、 'nameserver 8.8.8.8')を使用していることが判明しました。 –

+0

@Steven Oxley大変ありがとうございます!!!!私はこの問題の解決策を見つけるのに2時間を費やし、あなたのアドバイスだけが役に立ちました。 –

2

/etc/resolv.confに入れたホスティングプロバイダのIPに関連する問題です。修理はできません。それはあなたのホスティングプロバイダの問題です。

ただし、Google public dns:8.8.8.8を使用することができます。 /etc/resolv.conf開き、その後、すべてのデータを削除し、書き込み:

nameserver 8.8.8.8 

はそれを保存します。 DNSとApacheを再起動します。その後、もう一度試してください。