2011-12-07 27 views
13

estoy usando MAMP Pro 1.9.4 en Mac OS X
En phpinfo() veo rizo está habilitadoPHP Curl no funciona en 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 

Mi guión es geocodificar lat largo de la API de Google. Funciona en línea en el servidor de mi servidor de alojamiento pero no en el servidor local ... ¿POR QUÉ?

$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

está detrás de un proxy? – Riyono

+0

¿Qué $ httpCode estás recibiendo? –

+0

$ httpCode = 404 – FFish

Respuesta

6

Es probable que sea un problema de cortafuegos. Curl de forma predeterminada intenta usar el puerto 1080, que probablemente no esté abierto en su servidor local/enrutador/ISP.

+0

¿puedo cambiar el puerto que? – FFish

+2

curl_setopt ($ ch, CURLOPT_PORT, 8089); –

+0

Ok, donde Dan derecho que tenía esta regla de firewall para bloquear cualquier conexión 'httpd'. Después de desactivar esto, todo funcionó. – FFish

0

es lo que realmente ha instalado el curl binaria? Usted puede tener el instalado con PHP sin necesidad de tener el binario curl en su sistema curl biblioteca. Suelta a un intérprete de comandos de shell y escribe curl. (Si es estándar en OSX, por favor, perdona mi ignorancia - Yo no soy un tipo Mac)

+0

sí, está instalado. – FFish

0

Si estás detrás de un proxy, podría intentar agregar CURLOPT_PROXY, por ejemplo (suponiendo que el proxy es 192.168.1.2 en el puerto 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); 

Espero que esto ayude.

+0

nah no funciona :-( – FFish

+0

si está detrás de un proxy, es necesario conocer el detalle de su proxy y reemplazar el '192.168.1.2: 3128' parte :) – Riyono

+0

hay realmente he intentado con la mía, nada .. – FFish

29

No se trata de proxy, se trata de cómo utilizar googleapis.

Añadir CURLOPT_SSL_ on su código y los puso en false

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

Tenga en cuenta que no está enviando ningún dato sensible; apagar la verificación SSL como este puede dejar de abrir para los piratas informáticos: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html – ansorensen

+2

usted es el hombre! –

+0

Eres un salvavidas. Recientemente trabajé en un proyecto usando cURL por primera vez y todo estaba trabajando en mi perfecta instalación local, pero simplemente no estaba trabajando en el equipo final donde estaba lo hospeda. Pasé unas 5 horas intentando todo lo que pude pensar antes de encontrar esto. – APAD1

1

En MAMP, si se producen errores cuando se conecta a HTTPS anfitriones, acaba de establecer esta opción:

curl_setopt ($ ch, CURLOPT_SSLVERSION, 3);

El equivalente de línea de comandos es:

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

2

Es posible que necesite para establecer la versión SSL y el cifrado de juego para $ch:

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

Para la exacta los parámetros se pueden pasar a ver CURLOPT_SSLVERSION: http://php.net/manual/en/function.curl-setopt.php

también los siguientes pueden mostrar los errores relacionados con las versiones de SSL que se utiliza para ayudar a encontrar la versión exacta de conflictos tiene:

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

Más información sobre este comando: http://php.net/manual/en/ref.curl.php