2012-06-20 31 views
5

Estoy utilizando los servicios de Google GeoCoding. Tengo una aplicación PHP que llama a la API de Google Maps y recibe datos JSON. La función que llama al host de Google Maps se cuelga hasta que se agota el tiempo de espera, pero solo cuando presiono el servidor Godaddy Virtual Private.file_get_contents cuelga

ya he ssh'd en el servidor y php.ini editado he cambiado "modo seguro" en "off"

me sale este mensaje de error:

Mensaje: file_get_contents (http://maps.googleapis.com/maps/api/geocode/json?address=xYxY & sensor = false): pudo abrir la secuencia: la conexión agotado

Este funciona bien en mi servidor WAMP pero falla en el servidor en vivo. ¿Alguna idea de por qué?

+2

Google puede ser firewall-ed en el servidor en vivo de Ur – Sergey

+1

Llame a su ISP y pregúnteles. Esa es la manera más fácil. @Sergey tiene razón, este es probablemente un problema de firewall. Muchos proveedores no permiten este tipo de conexiones. – Sanjay

+0

¿Obtienes otra información si tratas de usar 'wget' para obtener la página? El comando es: 'wget http: //maps.googleapis.com/maps/api/geocode/json? Address = xYxY & sensor = false' – h2ooooooo

Respuesta

8

He encontrado la respuesta. ¿Qué ha sido una semana, ahora? Espero que otros encuentren esta solución. Los servidores virtuales dedicados de GoDaddy están habilitados para IPv6, pero la API de Google Maps no tiene nada de eso. Así que informe a Curl para forzar solicitud v4, así:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

crédito es debido en parte a un blog donde encontré esta información:

http://www.businesscorner.co.uk/disable-ipv6-in-curl-and-php/

+0

Muy bien, gracias. –

+1

Maravilloso. Encontré varios informes de errores con respecto a este problema, pero eres el primero en dar una solución. – Digits

-1

Use curl para obtener datos externos. Muchos servidores compartidos evitan el uso de file_get_contents para datos externos (http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen) debido a riesgos de seguridad.

Un montón de ejemplos curl en línea.

+0

comenzó con curl. después de horas de frustración cambió a file_get_contents. Ahora vuelvo a curl. Pero el problema permanece Uso de curl O file_get_contents() Puedo cargar datos de otros servidores. No puedo llamar a Google Maps API. Los tiempos de proceso para el tiempo máximo en mi servidor dedicado virtual (120 segundos). Trabaja instantáneamente en mi máquina local, funciona instantáneamente con otra url de prueba. Solo Google Maps se cuelga. – GRY

+0

OK - mi respuesta no es la solución entonces - y lo eliminaré en breve.Será un problema de enrutamiento/firewall de GoDaddy, o bloqueará las llamadas de Google de manera activa, aunque pensé que tendrían tiempo de espera instantáneo. Lo siento por el bum steer (pero aún sugiero que te quedes con curl para un futuro desarrollo). – Robbie

+0

Gracias Robbie, volví a CuRL. Creo que tienes razón en que es el mejor enfoque. – GRY

0

Revise su red. Google no bloquea dicha solicitud.

Verificar here.

1

En lugar de simplemente deshabilitar IPv6, puede intentar para conectar más de una versión de IP y luego cambiar a la otra si falla el primer intento. Esto hace que su implementación sea más robusta a los problemas de enrutamiento temporal en su extremo y en el remoto.

Puede obtener este comportamiento en file_get_contents() enlazando la conexión a una interfaz con inet6 o inet, y luego pruebe con la otra familia de direcciones si el primer intento devuelve FAIL. Escribí how to make file_get_contents() more routing-robust and dual-stack para cualquiera que esté interesado. También te muestro cómo forzar conexiones para usar IPv4 o IPv6 si prefieres seguir esa ruta.