3

特定の場所のタイムゾーンを返す関数が必要なので、 Google Time Zone APIを使用します。

function timezoneLookup($lat, $lng){

  $url = 'https://maps.googleapis.com/maps/api/timezone/json?location='.$lat.','.$lng.'&timestamp='.time().'&sensor=false';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $output = curl_exec($ch);
  curl_close($ch);

  return $output;
}     

$url を返すと、GET 変数 "×tamp=" が "×tamp=" に変換されていることがわかるため、関数は機能しません。

関数の外でスクリプトを実行すると、機能します。

どうして??

- - アップデート - -

問題を解決しました。curl は https:// では機能しないため、次を追加します。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

詳細については、こちらを参照してくださいPHP cURL が HTTPS で機能しない

4

2 に答える 2

3

この機能に問題はありません。その URL をエコーすると、html でフィルタリングされ、ASCII コードが認識されるため、乗算記号が表示されます。これは、HTML ビューア (ブラウザ) で表示した場合にのみ発生します。ソースを表示すると、元の文字列が表示されます。

curl_setopt() を介して渡されたときにこの変換が発生しないことを確認するために、サーバーでコードを実行したところ、期待どおりの結果が得られました。

echo timezoneLookup(52.2023913, 33.2023913);

function timezoneLookup($lat, $lng){

  $url = 'https://maps.googleapis.com/maps/api/timezone/json?location='.$lat.','.$lng.'&timestamp='.time().'&sensor=false';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $output = curl_exec($ch);
  curl_close($ch);

  return $output;
}     

戻ってきた...

{ "dstOffset" : 3600, "rawOffset" : 7200, "status" : "OK", "timeZoneId" : "Europe/Kiev", "timeZoneName" : "Eastern European Summer Time" }

このコードが機能しない場合は、ネットワークの問題である可能性があります。別の Web ページで curl を実行してみて、何が起こるかを確認してください。また、このような単純な API 呼び出しを使用すると、簡単に使用できますfile_get_contents()

于 2013-10-10T18:43:46.247 に答える
3

機能は正常に動作します。が に変換されている×tamp=ためです。ソースを表示すると、(Web ページで変換されたエンティティを表示する代わりに) 正しい URL が表示されます。 &times×

;必須でない理由

于 2013-10-10T18:42:19.143 に答える