Проблема в получении содержимого / файлов с использованием file_get_contents из URL или проблема в обратном геокодировании - PullRequest
0 голосов
/ 05 августа 2011

Я пытаюсь использовать обратный геокод с использованием API Google в PHP-скрипте (с использованием 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 "fail"

мой локальный php: php5.3.6 и веб-браузер 5.2.9.Так как он постоянно терпел неудачу, я изменяю URL-адрес на http://www.google.com для тестирования (без использования urlencode), а также на веб-сервере не удалось. Если у кого-нибудь есть идея исправить ошибку, пожалуйста, помогите. Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 05 августа 2011

URL-адрес выглядит уже правильно закодированным в URL, поэтому не перекодируйте его снова, в результате чего URL не работает в вашем случае. Вот почему вы получаете FALSE возвращаемое значение. Значение возвращаемых значений см. file_get_contents Документы .

Вместо этого просто получите URL:

$data = file_get_contents($url);

Если это не работает, только urlencode аргументов запроса:

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

См. Также url_encode Документы и Унифицированные идентификаторы ресурсов (RFC 2616, раздел 3.2) , а также Унифицированные идентификаторы ресурсов (URI): общий синтаксис (RFC 2396) .


Если вы хотите узнать больше, почему запрос не удался, вы можете получить больше информации, разрешив file_get_contents продолжить работу при сбоях HTTP (Пожалуйста, смотрите этот ответ, как вернуть документ в ответах 4xx ), это может быть полезно, если используемый вами URL-адрес уже правильный, и вы хотите узнать больше о том, что сервер сообщает вам.

Кроме того, вы можете проверить также код ответа HTTP-ответа, получив заголовки URL или используя $http_response_header Документы

И, наконец, Почему file_get_contents не работает? ответ в вики, охватывающий почти все, что может пойти не так и как с этим бороться .

1 голос
/ 05 августа 2011

Убедитесь, что на сервере включены «обертки URL», посмотрев на значение параметра ini PHP allow_url_fopen

Редактировать: вы можете проверить, включен он или нет с помощью этого фрагмента кода

echo php_ini_get('allow_url_fopen') ? 'Enabled' : 'Disabled';
1 голос
/ 05 августа 2011

Убедитесь, что в вашем php.ini

установлено значение allow_url_fopen .
0 голосов
/ 30 декабря 2014

Если вы все сделали правильно и все равно не добились успеха!И вы используете Redhat или CentOs. Затем попробуйте эту команду

setsebool -P httpd_can_network_connect on

Некоторые установки RedHat и CentOs блокируют httpd от отправки запросов на внешние серверы.

...