2011-11-22 231 views
68

我寫了這個簡單的代碼:curl_exec()始終返回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); 

在我的情況$website_content當屬false。 任何人都可以建議/建議一些可能會出錯的東西嗎?

+3

請查閱['curl_error()'](http://php.net/manual/en/function.curl-error.php)瞭解錯誤的詳細信息,請在這裏發佈。 –

+0

@LinusKleen如果您發佈curl_error()作爲答案,我會贊成它,因爲它允許我看看我的問題是什麼。 –

+0

究竟是什麼問題? 'curl_error()'揭示了什麼錯誤? – showdev

回答

167

錯誤檢查和處理是程序員的朋友。檢查初始化和執行cURL函數的返回值。 curl_error()curl_errno()將包含在故障情況下的進一步信息:

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:在'curl_exec'上的PHP中curl的簡單和直接的故障排除FALSE return。 - [Curl詳細模式在PHP示例中](http://stackoverflow.com/a/9571305/367456) – hakre

+0

是的。實際上很久以前就已經知道了這一點。感謝您的答案:) – Adithya

+6

沒問題。得到了復興徽章:-)感謝您的接受。 –

0

這發生在我昨天和我的情況是因爲我下面一個PDF手冊,在一些模塊的API進行通信,並在複製鏈接直接從手冊中,出於某種奇怪的原因,來自複製鏈接的hyphen採用了不同的編碼,因此curl_exec()總是返回false,因爲它無法與服務器通信。

我花了幾個小時,終於明白在波紋管的人物的性差異:

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

每次我試圖直接從瀏覽器它轉換成類似https://www.xn--eexample-0m3d.com/api訪問的鏈接。

它可能在你看來,他們是平等的,但如果你檢查hyphenshere的編碼,你會看到第一個hyphen是Unicode字符U+2010,另一個是U+002D

希望這可以幫助別人。