2009-04-09 17 views
6

Meine Webseite verwendet Google-Diagramme, um fünf Grafiken zu erstellen. Wenn die Diagramme nicht bereits zwischengespeichert sind, habe ich die folgende Codezeile, die das Bild abruft.

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

Wenn dieser Code in einer Schleife ausgeführt wird, dauert es 10 Sekunden, um jedes Bild zu erhalten. Aber, wenn ich den Code ändern, um eine der IP-Adressen von Google anstelle der URL zu verwenden:

$ image = file_get_contents ("http://74.125.93.100/chart?". $ Query);

Das Abrufen der Bilder dauert weniger als eine Sekunde. Also mein erster Gedanke war, dass DNS die URL nicht auflöst und die Verzögerung vom Durchlaufen der zugewiesenen DNS-Server ausgeht? Also habe ich versucht, chart.apis.google.com vom Server aus zu pingen und es hat sofort eine angemessene Antwort zurückgegeben.

Also meine Frage ist: Gibt es irgendwelche PHP (oder Apache2) -Konfiguration Einstellung, die ich möglicherweise übersehen, dass diese Verzögerung verursachen kann, oder klingt das wie ein Serverkonfigurationsproblem?

+0

Was ist, wenn Sie eine andere Methode zum Abrufen des Bildes wie cURL verwenden? – Matt

+0

Welche Version von PHP? Gibt es eine Chance, dass du auf die neueste Version upgraden kannst, um zu sehen, ob das das Problem behebt? –

+0

Ich würde einige Tests durchführen, um zu sehen, ob DNS tatsächlich das Problem ist. Sie können Ihre API-Aufrufe in einen Timing-Block einbinden. –

Antwort

1

Warum nicht die IP vor dem Start zu lösen, um die Bilder zu laden?

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

Ja, das würde funktionieren, würde aber noch ~ 10 Sekunden kosten ist inakzeptabel. Ich bin davon überzeugt, es ist ein Config-Problem, nur nicht sicher, ob es wie ein PHP, Apache oder Server-Config-Problem klingt. – Kevin

+0

Es funktioniert nur, wenn auf diesem Server nur eine Site gehostet wird. In mehreren Umgebungen Server würde nicht wissen, welche Seite Sie anrufen – Alekc

7

Ihre DNS-Auflösung ist langsam (die DNS-Server verwendet, kann ein broblem sein, dann die meisten anderen Domänen langsam sein könnte) oder den Server hat Probleme den DNS-Cache verwenden.

In jedem Fall, wenn Sie nicht bestimmte Gründe haben, das Bild von Google-Charts zu manipulieren, warum drucken Sie es nicht einfach als ein img-Tag aus? Sie können Texte oder transparente PNG-s mit CSS überlagern, wenn Sie möchten.

4

Bekam das gleiche Problem hier. Es könnte ein DNS-Problem sein ... vielleicht der Apache-Server , der DNS-Server verwendet, die zu langsam sind.

Ich habe verschiedene Möglichkeiten ausprobiert: CURL, WGET (Shell Exec) ... und immer noch das gleiche Leistungsproblem.

Es dauert ungefähr 15 Sekunden auf meinem Produktionsserver. Aber auf meinem lokalen Server (der IP verwendet) dauert weniger als 1,5 Sekunden mit meinem Skript.

versuchen Sie, /etc/resolv.conf oder /etc/named.conf? könnte sein. Ich versuche eine Lösung zu finden.

+4

Ich hatte das gleiche Problem wie Sie scheint es. Meine Lösung stellte sich heraus, dass ich meine /etc/resolv.conf editierte, um Googles Nameserver (d. H. 'Nameserver 8.8.8.8') zu verwenden. –

+0

@ Steven Oxley DANKE SEHR VIEL !!!! Ich habe 2 Stunden gebraucht, um eine Lösung für dieses Problem zu finden, und nur dein Rat war nützlich. –

2

Es ist ein Problem im Zusammenhang mit der IP-Hosting-Provider in /etc/resolv.conf setzen. Sie können es nicht reparieren. Es ist ein Problem Ihres Hosting-Providers.

Aber Sie können die öffentliche Google-DNS verwenden: 8.8.8.8. Öffnen /etc/resolv.conf, dann alle Daten löschen und schreiben:

nameserver 8.8.8.8 

speichere es. Starten Sie DNS und Apache neu. Dann versuche es noch einmal.

Verwandte Themen