2011-11-22 35 views
68

He escrito este simple trozo de código:curl_exec() devuelve siempre falsas

$ch = curl_init(); 

//Set options 
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$website_content = curl_exec ($ch); 

En mi caso $website_content viene como false. ¿Alguien puede sugerir/aconsejar algo que podría estar yendo mal?

+3

Consulte ['curl_error()'] (http://php.net/manual/en/function.curl-error.php) para obtener detalles del error y publíquelos aquí, por favor. –

+0

@LinusKleen Si publicas el curl_error() como respuesta, lo votaré mejor, ya que me permitió ver cuál era mi problema. –

+0

¿Cuál fue exactamente el problema? ¿Qué error reveló 'curl_error()'? – showdev

Respuesta

167

La comprobación y el manejo de errores es el amigo del programador. Verifique los valores de retorno de las funciones de inicialización y ejecución de cURL. curl_error() y curl_errno() contendrá más información en caso de fallo:

try { 
    $ch = curl_init(); 

    if (FALSE === $ch) 
     throw new Exception('failed to initialize'); 

    curl_setopt($ch, CURLOPT_URL, 'http://example.com/'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt(/* ... */); 

    $content = curl_exec($ch); 

    if (FALSE === $content) 
     throw new Exception(curl_error($ch), curl_errno($ch)); 

    // ...process $content now 
} catch(Exception $e) { 

    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()), 
     E_USER_ERROR); 

} 
+7

+1: solución de problemas simple y directa para curl en PHP en 'curl_exec' retorno FALSO. - [Curl Verbose Mode en PHP ejemplo] (http://stackoverflow.com/a/9571305/367456) – hakre

+0

sí. De hecho lo había descubierto hace mucho tiempo. Gracias por la respuesta :) – Adithya

+6

No hay problema. Tengo una insignia Revival :-) Gracias por aceptar. –

0

Esto me sucedió ayer y en mi caso fue porque yo estaba siguiendo un manual en PDF para desarrollar algún módulo para comunicarse con un API y al copiar el enlace directamente del manual, por alguna extraña razón, el hyphen del enlace copiado estaba en una codificación diferente y, por lo tanto, el curl_exec() siempre devolvía false porque no podía comunicarse con el servidor.

Me tomó un par de horas para terminar de comprender la diference en los caracteres de abajo:

https://www.e‐example.com/api 
https://www.e-example.com/api 

Cada vez que trataba de acceder al enlace directamente desde un navegador se convierte en algo así como https://www.xn--eexample-0m3d.com/api.

que pueda parecer a usted que son iguales, pero si se activa la codificación de la hyphenshere verá que la primera es una hyphen caracteres Unicode U+2010 y el otro es un U+002D.

Espero que esto ayude a alguien.

Cuestiones relacionadas