Mac OSXでMAMP Pro 1.9.4を使用しています
_phpinfo()
では、curlが有効になっているのがわかります
cURL support enabled
cURL Information 7.20.0
Age 3
Features
AsynchDNS No
Debug No
GSS-Negotiate No
IDN Yes
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI No
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, smtp, smtps, telnet, tftp
Host i386-Apple-darwin8.11.1
SSL Version OpenSSL/0.9.7l
ZLib Version 1.2.3
私のスクリプトは、Google APIから緯度経度をジオコーディングすることです。ホスティングプロバイダーのサーバーではオンラインで機能しますが、localhostでは機能しません。なぜですか?
$latlng = "44.3585230889,8.57745766643";
$lang = "it";
$geocodeURL = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$latlng&sensor=false&language=$lang";
$ch = curl_init($geocodeURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
$geocode = json_decode($result);
$location = $geocode->results[0]->address_components[0]->long_name;
$city = $geocode->results[0]->address_components[1]->long_name;
$province = $geocode->results[0]->address_components[2]->long_name;
$region = $geocode->results[0]->address_components[3]->long_name;
$country = $geocode->results[0]->address_components[4]->long_name;
$geo_status = $geocode->status;
$geo_str = "$location, $city, $province, $region, $country";
} else {
$geo_status = "HTTP_FAIL_$httpCode";
$geo_str = "Failed: $geo_status";
}
おそらくファイアウォールの問題です。デフォルトでは、Curlはポート1080を使用しようとしますが、おそらくローカルホスト/ルーター/ ISPで開いていません。
プロキシについてではなく、googleapisの使用方法についてです。
追加 CURLOPT_SSL_ on
コードをfalse
に設定します
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$ch
のSSLバージョンと一致する暗号を設定する必要がある場合があります。
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
CURLOPT_SSLVERSION
に渡すことができる正確なパラメーターについては、以下を参照してください。 http://php.net/manual/en/function.curl-setopt.php
また、次の場合は、使用されているSSLバージョンに関連するエラーが表示され、正確なバージョンの競合を見つけるのに役立ちます。
$error = curl_error($ch);
echo $error;
このコマンドの詳細: http://php.net/manual/en/ref.curl.php
MAMPでは、HTTPSホストへの接続時にエラーが発生する場合は、このオプションを設定するだけです。
curl_setopt($ ch、CURLOPT_SSLVERSION、3);
コマンドラインでこれに相当するものは次のとおりです。
curl -k -ssl3 https://www.your-secure-Host.com
プロキシの背後にいる場合は、たとえばCURLOPT_PROXY
を追加してみてください(プロキシが192.168.1.2ポート3128にあると想定)。
$ch = curl_init($geocodeURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, "192.168.1.2:3128");
$result = curl_exec($ch);
お役に立てれば。
実際にcurl
バイナリがインストールされていますか? curl
ライブラリをPHPでインストールすることができます。実際にはシステムにcurl
バイナリがありません。シェルプロンプトにドロップし、curl
と入力します(OSXの標準の場合は、無視してください-I Macの男ではない)