2011-11-22 9 views
68

Pisałem ten prosty kawałek kodu:curl_exec() zawsze zwraca 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); 

W moim przypadku $website_content przychodzi jako false. Czy ktoś może zasugerować/doradzić coś, co może pójść nie tak?

+3

Skonsultuj ['curl_error()'] (http://php.net/manual/en/function.curl-error.php), aby uzyskać szczegółowe informacje o błędach i opublikuj je tutaj, proszę. –

+0

@LinusKleen Jeśli opublikujesz curl_error() jako odpowiedź, zrobię to, ponieważ pozwoliło mi zobaczyć, jaki jest mój problem. –

+0

Jaki dokładnie był problem? Jaki błąd ujawnił 'curl_error()'? – showdev

Odpowiedz

167

Sprawdzanie błędów i obsługa jest przyjacielem programisty. Sprawdź zwracane wartości inicjowania i wykonywania funkcji cURL. curl_error() i curl_errno() będzie zawierał dodatkowych informacji w przypadku awarii:

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: Proste i proste rozwiązywanie problemów z zawijaniem w PHP na 'curl_exec' FALSE return. - [Curl Verbose Mode w przykładzie PHP] (http://stackoverflow.com/a/9571305/367456) – hakre

+0

tak. Wcześniej to wymyśliłem. Dzięki za odpowiedź :) – Adithya

+6

Bez problemu. Otrzymałem odznakę odrodzenia :-) Dziękuję za przyjęcie. –

0

To zdarzyło mi się wczoraj, w moim przypadku było bo po podręcznik PDF opracować jakiś moduł do komunikacji z API i podczas kopiowania linku bezpośrednio z instrukcji, z jakiegoś dziwnego powodu, hyphen z skopiowanego łącza było w innym kodowaniu, a zatem curl_exec() zawsze zwracał false, ponieważ nie mógł się komunikować z serwerem.

zajęło mi kilka godzin, by w końcu zrozumieć diference w postaci poniżej:

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

każdym razem starałem się otworzyć odnośnik bezpośrednio z poziomu przeglądarki jest przekształcany do czegoś jak https://www.xn--eexample-0m3d.com/api.

Może wydawać ci się, że są one równe, ale jeśli sprawdzić kodowanie hyphenshere zobaczysz, że pierwszy hyphen jest Unicode znaków U+2010 a drugi jest U+002D.

Mam nadzieję, że to komuś pomaga.