file_get_contents挂起

时间:2012-06-20 06:53:04

标签: php google-maps

我正在使用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服务器上工作正常但在实时服务器上失败。有什么想法吗?

4 个答案:

答案 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)。

网上有很多卷曲的例子。