J'utilise les services Google Geocoding. J'ai une application PHP qui appelle l'API Google Maps et reçoit des données JSON. La fonction qui appelle l'hôte de Google Maps Hangs jusqu'à ce que cela soit terminé, mais seulement lorsque j'appuie sur Godaddy virtuel privé serveur privé. P>
J'ai déjà SSH'D dans le serveur et édité php.ini J'ai changé "mode sans échec" pour "OFF" P>
Je reçois ce message d'erreur: P>
message: File_Get_Contents (http://maps.googleapis.com/maps/api/geocode/json?address=xyxy&sensor=false): Échec de l'ouverture du flux: Connexion expirée p> blockQuote>
Cela fonctionne bien dans mon serveur Wamp, mais échoue sur Live Server. Des idées pourquoi? P>
4 Réponses :
Utilisez CURL pour obtenir des données externes. De nombreux serveurs partagés empêchent l'utilisation de fichiers_get_contents pour des données externes (http://www.php.net/manual/fr/filesystem.configuration.php#ini.allow-url-fopen) en raison de risques de sécurité. P>
beaucoup d'exemples de courbure en ligne. P>
commencé avec boucle. Après des heures de frustration, passez à File_Get_Contents. Maintenant, je retourne pour boucler. Mais le problème reste. Utilisation de CURL ou FILE_GET_Contents () Je peux charger des données d'autres serveurs. Je ne peux pas appeler l'API Google Maps. Le processus de processus pour le temps maximum sur mon serveur dédié virtuel (120 secondes). Fonds instantanément sur ma machine locale, fonctionne instantanément avec une autre URL de test. Juste Google Maps se bloque.
Ok - ma réponse n'est pas la solution alors - et je vais supprimer bientôt. Ce sera soit un problème de pare-feu de Godaddy / de routage, soit Google bloquant activement les appels - bien que je puisse avoir pensé à la fois instantanément. Désolé pour le bum bum (mais vous suggérez toujours de rester avec boucle pour le développement futur).
Merci Robbie, je suis retourné à Curl, je pense que vous êtes juste à propos de la meilleure approche.
J'ai trouvé la réponse. Quelle a été une semaine, maintenant? J'espère que les autres trouver cette solution. Les serveurs virtuels dédiés de GoDaddy sont activés IPv6, mais Google Maps API n'en a aucun de cela. Dites donc Curl de forcer la demande V4, comme ceci:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
Merveilleux. J'ai trouvé plusieurs rapports de bugs concernant ce problème, mais vous êtes le premier à donner une solution.
Plutôt que simplement désactiver IPv6, vous pouvez essayer de vous connecter sur une version IP, puis échangez-vous à l'autre si la première tentative échoue. Cela rend votre mise en œuvre plus robuste avec les problèmes de routage temporaires sur votre et la distance à distance. P>
Vous pouvez obtenir ce comportement dans file_get_contents () code> en reliant la connexion à une interface avec INet6 ou Inet, puis essayez l'autre famille d'adresses si la première tentative renvoie l'échec. J'ai écrit Comment faire
File_Get_Contents () Code> Plus de routage - robuste et double pile
pour toute personne intéressée. Je vous montre également comment forcer les connexions à utiliser IPv4 ou IPv6 si vous préférez descendre cette route. P>
Google peut être pare-feu dans votre serveur Live
Appelez votre FAI et demandez-leur. C'est le moyen le plus simple. @Sergey a raison, il s'agit probablement d'une question de pare-feu. De nombreux fournisseurs n'autorisent pas ces types de connexions.
Avez-vous d'autres informations si vous essayez d'utiliser
wget code> pour obtenir la page? Commande est:
wget http://maps.googleapis.com/maps/papi/geocode/json?address=xyx y & capteur = false code>