0

我正在尝试在 php 脚本中使用 google api 进行反向地理编码(使用 xmlrpc)。我在本地系统中编写了以下代码,它工作正常,但是当我在我们的网络服务器中尝试时它失败了。

function reverseGeoCode()
{
    $url = "http://maps.google.com/maps/geo?json&ll=".$lat.",".$long;
    $data = file_get_contents(urlencode($url));
    if ($data == FALSE)
    {
        echo "failed";
    }
    else
    {
        echo "success";

        // parsing the json/xml ...
    }
}

我得到了 o/p “失败”

我的本地 php:php5.3.6 和 webser 是 5.2.9。由于它不断失败,我将 url 更改为http://www.google.com进行测试(不使用 urlencode),然后它在网络服务器中也失败了。如果有人有想法纠正我的错误请帮助。提前致谢

4

4 回答 4

2

URL 看起来已经正确地进行了 URL 编码,因此不要再次对其进行 URL 编码,这会导致 URL 在您的情况下不起作用。这就是您获得FALSE返回值的原因。有关返回值的含义,请参阅file_get_contentsDocs

相反,只需获取 URL:

$data = file_get_contents($url);

如果这不起作用,只需对查询参数进行 urlencode:

$url = sprintf("http://maps.google.com/maps/geo?json&ll=%s,%s", 
                urlencode($lat), urlencode($long));

另请参阅url_encodeDocs and Uniform Resource Identifiers (RFC 2616 Section 3.2)以及Uniform Resource Identifiers (URI): Generic Syntax (RFC 2396)


如果您想了解更多请求失败的原因,您可以通过允许file_get_contents继续处理 HTTP 失败来获得更多信息(请参阅此答案如何在 4xx 响应上返回文档),如果您的 URL 是using 已经正确,您想了解更多有关服务器告诉您的信息。

在旁边,您还可以通过获取 URL 的标头或使用$http_response_headerDocs检查响应 HTTP 状态代码

最后是为什么不起作用file_get_contents?wiki 回答几乎涵盖了所有可能出错的问题以及如何处理它

于 2011-08-05T09:45:30.280 回答
1

确保在 php.ini 中将allow_url_fopen设置为 on

于 2011-08-05T09:46:18.330 回答
1

您应该通过查看 PHP ini 设置的值来检查服务器上是否启用了“URL 包装器”allow_url_fopen

编辑:您可以使用这段代码检查它是否已启用

echo php_ini_get('allow_url_fopen') ? 'Enabled' : 'Disabled';
于 2011-08-05T09:46:53.367 回答
0

如果你做的一切都是正确的,但仍然没有成功!而你正在使用 Redhat 或 CentOs .. 然后试试这个命令

setsebool -P httpd_can_network_connect on

一些 RedHat 和 CentOs 安装阻止 httpd 向外部服务器发送请求。

于 2014-12-30T11:56:20.250 回答