file_get_contents hangs


file_get_contents hangs

我正在使用谷歌地理编码服务。我有一个PHP应用程序,它调用Google Maps API,并接收JSON数据。调用谷歌地图主机的函数挂起,直到超时,但只有当我推送到 Godaddy 虚拟专用服务器时。

我已经ssh进入服务器并编辑了php.ini我将"安全模式"更改为"关闭"

我收到此错误消息:

消息: file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=xYxY&sensor=false): 无法打开流:连接超时

这在我的 WAMP 服务器中工作正常,但在实时服务器上失败。知道为什么吗?

我已经找到了答案。 现在一周过去了?我希望其他人找到这个解决方案。 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/

您可以尝试通过一个 IP 版本

进行连接,然后在第一次尝试失败时交换到另一个 IP 版本,而不是仅仅禁用 IPv6。这使您的实现对您和您的远程端的临时路由问题更加可靠。

您可以通过将连接绑定到 inet6 或 inet 的接口来file_get_contents()获取此行为,然后在第一次尝试返回 FAIL 时尝试其他地址系列。我写了如何为任何感兴趣的人file_get_contents()更强大的路由和双堆栈。我还向您展示了如果您更喜欢该路线,如何强制连接使用 IPv4 或 IPv6。

使用 curl 获取外部数据。由于安全风险,许多共享服务器阻止将file_get_contents用于外部数据 (http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)。

网上有很多卷曲的例子。

检查您的网络。谷歌不会阻止此类请求。

查看此处。