2013-04-21 48 views
1

我正在設置一個網站,用戶將能夠發佈鏈接,並且curl(在php中)將抓取網址,並根據元數據格式化某些內容,打開圖形標記,等我有它設置爲與multi_init和multi_exec同時上傳。我創造了什麼是應該做的類here.一個要點是:如果內容類型錯誤,則中止捲曲下載

  • 獲取元數據從多個網址
  • 返回一個JSON字符串,但僅適用於內容類型「text/html的」網頁(所以不要不要打擾與圖像,js,可執行文件等的直接鏈接)

這個問題似乎是CURLOPT_HEADERFUNCTION的回調。我認爲當內容類型頭文件存在時返回-1,但不是HTML頭文件會中止下載,但它似乎沒有做任何事情(雖然檢查看起來是正確的,它似乎返回-1。 )它似乎仍然允許任何內容類型。

這裏專門爲回調:

CURLOPT_HEADERFUNCTION => function($ch, $header){ 

// if they're sending a content-type header, it must be text/html 
if(stripos(trim($header), "Content-Type") === 0){ 

list($key, $val) = explode(":", $header); 

if(stripos(trim($val), "text/html") === 0){ 
    return strlen($header); 
    } 
    else{ 
    return -1; 
    } 
} 
else{ 
    return strlen($header); 
} 
} 

我試圖curl_close但得到一個錯誤約在回調結束捲曲。有什麼建議麼?

回答

1

使用回調來設置(全局)變量。錯誤時跳過您的curl_exec()呼叫。

$htmlheader = true; 
function header_callback($ch, $headers) 
{ 
    $GLOBALS['htmlheader']=false; 
} 
$ch = curl_init('http://www.example.com/'); 
curl_setopt($ch,CURLOPT_HEADERFUNCTION, 'header_callback'); 
if($htmlheader) 
{ 
    $result = curl_exec($ch); 
} 
curl_close($ch); 
+0

我不得不改變一些事情讓它與multi_exec工作(主要是使用數組,而不是一個單一的全球),但沒有工作,謝謝。我用班級的工作版本更新了上面的要點。 – 2013-04-21 23:03:32