2011-12-07 14 views
13

Sto usando MAMP Pro 1.9.4 su Mac OSX
In phpinfo() vedo ricciolo è abilitatoPHP Curl non funziona su localhost?

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 

mio script è quello di geocoding lat lunga da Google API. Funziona online sul mio server di hosting ma non su localhost .. PERCHÉ ??

$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"; 
} 
+1

sei tu dietro un proxy? – Riyono

+0

Cosa $ httpCode stai ricevendo? –

+0

$ httpCode = 404 – FFish

risposta

6

Probabilmente è un problema di firewall. Per impostazione predefinita, Curl tenta di utilizzare la porta 1080, che probabilmente non è aperta sul tuo localhost/router/ISP.

+0

posso cambiare la porta di? – FFish

+2

curl_setopt ($ ch, CURLOPT_PORT, 8089); –

+0

Ok, dov'è giusto Dan Ho avuto questa regola del Firewall per bloccare le connessioni 'httpd'. Dopo aver disabilitato tutto ciò ha funzionato. – FFish

0

Avete effettivamente installato il binario curl? Puoi avere la libreria curl installata con PHP senza avere effettivamente il binario curl sul tuo sistema. Passare al prompt della shell e digitare curl. (Se è standard su OSX, per favore perdona la mia ignoranza - Io non sono un ragazzo Mac)

+0

sì, è installato. – FFish

0

Se sei dietro un proxy, si potrebbe provare l'aggiunta di CURLOPT_PROXY, per esempio (supponendo che il proxy è sulla porta 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); 

Spero che questo aiuti.

+0

nah non ha funzionato :-( – FFish

+0

se sei dietro un proxy, devi scoprire i dettagli del tuo proxy e sostituire la parte '192.168.1.2: 3128' :) – Riyono

+0

no davvero ho provato con il mio, nada .. – FFish

29

Non si tratta di proxy, si tratta di come utilizzare googleapis.

Aggiungi CURLOPT_SSL_ on il codice e li in false

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
+1

Fai attenzione che non invii dati sensibili; disattivare la verifica SSL come questa può lasciare aperta agli hacker: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html – ansorensen

+2

tu sei l'UOMO! –

+0

Sei un vero toccasana. Recentemente ho lavorato a un progetto usando cURL per la prima volta e tutto funzionava perfettamente sulla mia installazione locale, ma semplicemente non funzionava sul computer finale in cui lo stavo ospitando. Ho passato circa 5 ore provando tutto quello che potevo pensare prima di trovare questo. – APAD1

1

In MAMP, se hai trovato errori durante la connessione a HTTPS padroni di casa, è sufficiente impostare questa opzione:

curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);

L'equivalente da riga di comando è:

ricciolo -k -ssl3 https://www.your-secure-host.com

2

Potrebbe essere necessario impostare la versione SSL e il Cipher corrispondenza per $ch:

curl_setopt($ch, CURLOPT_SSLVERSION, 1); 
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); 

Per l'esatto parametri che è possibile passare a CURLOPT_SSLVERSION vedere: http://php.net/manual/en/function.curl-setopt.php

anche i seguenti grado di visualizzare errori relativi alle versioni SSL viene utilizzato per aiutare a trovare esattamente conflitto di versione avete:

$error = curl_error($ch); 
echo $error; 

Maggiori informazioni su questo comando: http://php.net/manual/en/ref.curl.php