2009-04-09 17 views
6

Mi página web usa Google charts para producir cinco gráficos. Si los gráficos aún no están en la memoria caché, tengo la siguiente línea de código que recupera la imagen.

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

Cuando ese código se ejecuta en un bucle, toma 10 segundos obtener cada imagen. Pero, si cambio el código para usar una de las direcciones IP de Google en lugar de la url:

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

Tarda menos de un segundo para recuperar las imágenes. Entonces, mi idea inicial fue que el DNS no está resolviendo la URL y que la demora consiste en pasar por los servidores DNS asignados. Así que traté de hacer ping a chart.apis.google.com desde el servidor e inmediatamente me respondió razonablemente.

Así que mi pregunta es: ¿Hay alguna configuración de PHP (o Apache2) que pueda estar pasando por alto que pueda causar este retraso, o esto suena como un problema de configuración del servidor?

+0

¿Qué sucede si usa otro método para recuperar la imagen como cURL? – Matt

+0

¿Qué versión de PHP? ¿Alguna posibilidad de actualizar a la última para ver si eso soluciona el problema? –

+0

Haría algunas pruebas para ver si DNS realmente es el problema. Puede ajustar sus llamadas API en un bloque de tiempo. –

Respuesta

1

¿Por qué no resolver la ip antes de comenzar a cargar las imágenes?

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

Sí, eso funcionaría, pero aún le costaría ~ 10 segundos que es inaceptable Estoy convencido de que es un problema de configuración, simplemente no estoy seguro si suena como un PHP, Apache o problema de configuración del servidor. – Kevin

+0

Funcionaría solo si en ese servidor está alojado solo un sitio. En el servidor de entorno de múltiples sitios no sabría a qué sitio está llamando – Alekc

7

Su resolución DNS es lento (el DNS de su servidor está utilizando puede ser un broblem, entonces la mayoría de los otros dominios podría ser lento) o el servidor tiene problemas al utilizar la caché DNS.

En cualquier caso, si no tiene algunas razones específicas para manipular la imagen recibida de los cuadros de Google, ¿por qué no simplemente la imprime como una etiqueta img? Puede superponer textos o png-s transparentes con css si lo desea.

4

Tiene el mismo problema aquí. Puede ser un problema de DNS ... tal vez el servidor Apache que usa servidores DNS que son demasiado lentos.

He intentado diferentes maneras: CURL, WGET (ejecutor de shell) ... y todavía tengo el mismo problema de rendimiento.

Tarda unos 15 segundos en mi servidor de producción. Pero en mi servidor local (que usa IP) toma menos de 1.5 segundos con mi script.

prueba /etc/resolv.conf o /etc/named.conf? tal vez. Estoy tratando de encontrar una solución.

+4

. Tenía el mismo problema exacto que usted, parece. Mi solución resultó ser la edición de mi /etc/resolv.conf para usar los servidores de nombres de Google (es decir, 'nameserver 8.8.8.8'). –

+0

@Steven Oxley ¡MUCHAS GRACIAS! Pasé 2 horas para encontrar una solución a este problema, y ​​solo tu consejo fue útil. –

2

Es un problema relacionado con la IP que su proveedor de hosting puso en /etc/resolv.conf. No puedes repararlo Es un problema de su proveedor de alojamiento.

Pero puede usar el google public dns: 8.8.8.8. Abrir /etc/resolv.conf, a continuación, eliminar todos los datos y escribir:

nameserver 8.8.8.8 

luego guardarlo. Reinicie dns y apache. Vuelva a intentarlo.