0

phpスクリプトでgoogleapiを使用して(xmlrpcを使用して)逆ジオコードを試しています。ローカルシステムで次のコードを記述しましたが、正常に機能しますが、Webサーバーで試行すると失敗します。

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を使用せずに)、Webサーバーでも失敗しました。エラーを修正するアイデアがある場合は、助けてください。よろしくお願いします。

4

4 に答える 4

2

URLはすでに適切に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ドキュメントとURI(Uniform Resource Identifiers )(RFC 2616セクション3.2)、およびURI(Uniform Resource Identifiers:Generic Syntax(RFC 2396))も参照してください。


リクエストが失敗した理由を詳しく知りたい場合は、file_get_contentsHTTPの失敗を続行できるようにすることで、より多くの情報を得ることができます(4xx応答でドキュメントを返す方法については、この回答を参照してください)。使用はすでに正しいので、サーバーが何を伝えているかについてもっと知りたいと思います。

次に、URLのヘッダーを取得するか、ドキュメントを使用して、応答HTTPステータスコードを確認することもできます。$http_response_header

そして最後に、なぜ機能しない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 に答える