2013-12-16 25 views

回答

2

首先,要從獲取文檔中獲取內容類型,請使用常量CURLINFO_CONTENT_TYPE

$type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 
echo $type; 

其次,你只提取HTML而不是圖像。說$ a輸出圖像是錯誤。您輸出HTML <img src="">。如果你在瀏覽器中這樣做,你會看到圖像,但這是因爲瀏覽器在客戶端獲取這些圖像。

獲取內容類型的最簡單方法是使用檢查文件擴展名。

$ext = pathinfo($a['src'], PATHINFO_EXTENSION); 

如果你確實需要使用文件擴展名,你必須做額外的捲曲電話。最好使用curl_multi來並行執行這些操作。

$mh = curl_multi_init(); 

foreach($html->find('img') as $a) { 
    $src = $a['src']; // You probably need to rewrite relative URL to absolute URLs 
    $ch = curl_init($src); 
    $ch = curl_set_opt($ch, CURLOPT_CUSTOMREQUEST, "HEAD"); 
    curl_multi_add_handle($mh, $ch); 
    $handles[] = $ch; 
} 

$running = null; 
do { 
    curl_multi_exec($mh, $running); 
} while ($running); 

foreach ($handles as $ch) { 
    $src = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    $type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 
    $image_types[$src] = $type; 
} 

代碼是未經測試

注意接收到的內容類型永遠不能完全信任,決不應被用於安全措施。如果您想確定,請下載所有圖像(GET請求而不是HEAD請求)並使用fileinfo extension

+0

我無法讓它工作,但我會接受作爲答案,如果沒有其他事情出現,因爲它確實對我有意義,我一定在做錯事......非常感謝你 – Youss

+0

對不起,我說' $ a',但你需要使用curl處理函數'$ ch'。 –

+0

好吧,現在我看到我真的誤解了你的問題。抱歉,等一下。 –