2011-11-22 19 views
68

Ho scritto questo semplice pezzo di codice:curl_exec() restituisce sempre false

$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); 

Nel mio caso $website_content si presenta come false. Qualcuno può suggerire/consigliare qualcosa che potrebbe andare storto?

+3

Consultare ['curl_error()'] (http://php.net/manual/en/function.curl-error.php) per i dettagli dell'errore e pubblicarli qui, per favore. –

+0

@LinusKleen Se registri curl_error() come risposta, lo inviterò perché mi permette di vedere quale fosse il mio problema. –

+0

Qual è stato esattamente il problema? Quale errore ha rivelato 'curl_error()'? – showdev

risposta

167

Il controllo e la gestione degli errori è l'amico del programmatore. Controllare i valori di ritorno delle funzioni CURL di inizializzazione ed esecuzione. curl_error() e curl_errno() conterrà ulteriori informazioni in caso di guasto:

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: risoluzione dei problemi semplice e immediata per curl in PHP sul ritorno FALSE 'curl_exec'. - [Curl Verbose Mode in PHP example] (http://stackoverflow.com/a/9571305/367456) – hakre

+0

sì. In realtà l'avevo capito da molto tempo. Grazie per la risposta però :) – Adithya

+6

Nessun problema. Ho un distintivo Revival per questo :-) Grazie per aver accettato. –

0

Questo è accaduto a me ieri e nel mio caso era perché stavo seguendo un manuale in PDF per sviluppare qualche modulo per comunicare con un API e durante la copia il link direttamente dal manuale, per qualche strana ragione, lo hyphen dal link copiato era in una codifica diversa e quindi restituiva sempre false perché non era in grado di comunicare con il server.

Mi ci sono voluti un paio d'ore per capire finalmente la diference nei personaggi sotto:

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

Ogni volta che ho provato per vedere il link direttamente da un browser è convertito in qualcosa di simile a https://www.xn--eexample-0m3d.com/api.

Può sembrare a voi che sono uguali, ma se si controlla la codifica del hyphenshere vedrete che il primo hyphen è a caratteri unicode U+2010 e l'altro è un U+002D.

Spero che questo aiuti qualcuno.

Problemi correlati