2012-04-19 46 views
70

我不明白當我echo $ httpCode我總是得到0,我期待404當我改變$ html_brand成破碎的網址。有什麼我想念或不知道的?謝謝。PHP cURL HTTP代碼返回0

//check if url exist 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $html_brand); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

if ($httpCode == 404) { 
    echo "The Web Page Cannot Be Found"; 
    return; 
} 
curl_close($ch); 

回答

65

如果你連接服務器,那麼你可以從它得到一個返回碼,否則它會失敗,你會得到一個0.所以,如果你嘗試連接到「www.google.com/lksdfk」你會得到一個400的返回碼,如果你直接去google.com,你會得到302(如果你轉到下一個頁面,那麼你會得到200 ......我這樣做,因爲它轉發到google.com.br,所以你可能不會得到的),如果你去「googlecom」你會得到一個0(主機沒有找到),所以最後一個,沒有人發回代碼。

使用下面的代碼測試。

<?php 

$html_brand = "www.google.com"; 
$ch = curl_init(); 

$options = array(
    CURLOPT_URL   => $html_brand, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_HEADER   => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_ENCODING  => "", 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_CONNECTTIMEOUT => 120, 
    CURLOPT_TIMEOUT  => 120, 
    CURLOPT_MAXREDIRS  => 10, 
); 
curl_setopt_array($ch, $options); 
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

if ($httpCode != 200){ 
    echo "Return code is {$httpCode} \n" 
     .curl_error($ch); 
} else { 
    echo "<pre>".htmlspecialchars($response)."</pre>"; 
} 

curl_close($ch); 
+0

此外thx爲refencing followlocation,有時我得到301這是一個重定向問題。 – Ardeus 2012-04-20 07:16:21

+0

即使$ response有html內容,它也很奇怪,但$ httpcode總是返回0,加上curl_error爲null。有可能出錯了。我只包含returntransfer,header(false),僅在設置中跟蹤位置。 – Ardeus 2012-05-02 12:08:07

+0

非常有用!非常感謝你。 – 2017-08-04 11:53:29

1

什麼是您傳遞到$ html_brand的確切內容?

如果有一個無效的URL語法,你很可能會得到HTTP代碼0

1

就像說here及以下,失敗的請求(即找不到服務器)返回false,沒有HTTP狀態碼,因爲從未收到回覆。

致電curl_error()

54

試試這個後curl_exec,看看有什麼問題:

print curl_error($ch); 

如果是打印類似「畸形」然後檢查你的URL格式。

+4

謝謝你的建議 - 救了我的屁股:) – wbj 2015-02-11 18:48:41

+0

是的!保存我的屁股。 – pimbrouwers 2016-10-31 13:25:11

1

檢查curl_getinfo後面的curl_error以找出隱藏的錯誤。

if(curl_errno($ch)){ 
    echo 'Curl error: ' . curl_error($ch); 
} 
1

我有同樣的問題,在我的情況下,這是因爲curl_exec函數在php.ini中被禁用。檢查日誌:

PHP Warning: curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18 

解決方法是刪除禁用功能curl_exec在服務器配置php.ini文件。