我正在使用Google GeoCoding服务。 我有一个调用Google Maps API的PHP应用程序,并接收JSON数据。 调用谷歌地图主机的功能会一直挂起,直到它超时,但只有当我推送到Godaddy虚拟专用服务器时。
我已经进入服务器并编辑了php.ini 我将“安全模式”更改为“关闭”
我收到此错误消息:
消息: 的file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=xYxY&sensor=false): 无法打开流:连接超时
这在我的WAMP服务器上工作正常但在实时服务器上失败。有什么想法吗?
答案 0 :(得分:8)
我找到了答案。现在几周了?我希望别人找到这个解决方案。来自GoDaddy的虚拟专用服务器已启用ipv6,但google maps API却没有。所以告诉Curl强制v4请求,如下所示:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
信用部分归功于我发现此信息的博客:
http://www.businesscorner.co.uk/disable-ipv6-in-curl-and-php/
答案 1 :(得分:2)
您可以尝试连接一个IP版本,然后在第一次尝试失败时切换到另一个IP版本,而不是仅禁用IPv6。这使您的实现对于您和远程端的临时路由问题更加健壮。
您可以通过将连接绑定到具有inet6或inet的接口来在file_get_contents()
中获取此行为,然后在第一次尝试返回FAIL时尝试其他地址系列。我为感兴趣的人写了how to make file_get_contents()
more routing-robust and dual-stack。我还向您展示了如果您希望沿着该路线走下去,如何强制连接使用IPv4或IPv6。
答案 2 :(得分:0)
检查您的网络。 Google不会阻止此类请求。
检查here。
答案 3 :(得分:-1)
使用curl获取外部数据。由于安全风险,许多共享服务器阻止将file_get_contents用于外部数据(http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)。
网上有很多卷曲的例子。