2012-12-21 22 views
0

如果我得到頁面的標題,我可以告訴下載鏈接處於活動狀態或已停用。檢查下載鏈接是否死在PHP?

例如:「免費存儲」是死鏈接的標題和「[文件名]」是活動鏈接(主人MediaFire)的稱號。但是,我的頁面需要很長時間才能響應,那麼還有其他方法可以檢查下載鏈接是處於活動狀態還是已停用?

這是我做了什麼:

<?php 

function getTitle($Url){ 
$str = file_get_contents($Url); 
if(strlen($str)>0){ 
    preg_match("/\<title\>(.*)\<\/title\>/",$str,$title); 
    return $title[1]; 
} 
} 

?> 
+2

請說明你做了什麼。 – luiges90

+0

對不起,我編輯了我的問題 – Mee

回答

2

不執行GET請求,其中下載整個網頁/文件,但HEAD請求,其中僅獲取HTTP標頭,並檢查狀態200,內容類型不是text/html

+1

僅僅返回200響應是不夠的;許多有效的鏈接在前所有者未能續約時變成色情/賭博門戶後將繼續返回「200」。 域名搶注者通常會確保其域中的每個URL都返回200. – underscore

+1

嗯,實際上解決方案是域特定的。我不認爲通用的解決方案可能存在,因爲計算機無法知道什麼是有效的頁面,什麼不適用於Internet的所有情況,但對於特定的站點,HEAD請求可能效果良好。 –

+0

它可以更詳細嗎?我只需要使用哪些代碼來請求標題,以及如何從中獲得標題?非常感謝你。 – Mee

0

cURL應該做這個工作。如果需要,您可以檢查返回的標題和文本內容。

1

事情是這樣的......

function url_validate($link) 
{ 
    #[url]http://www.example.com/determining-if-a-url-exists-with-curl/[/url] 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $link); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops 
    $data = curl_exec($ch); 
    curl_close($ch); 
    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); 

    $code = end($matches[1]); 

    if(!$data) 
    { 
     return(false); 
    } 
    else 
    { 
     if($code==200) 
     { 
      return(true); 
     } 
     elseif($code==404) 
     { 
      return(false); 
     } 
    } 
} 

您可以放心地使用任何捲曲庫函數。這是合法的,因此不會被視爲黑客攻擊。唯一的要求是您的網絡託管公司已經安裝了cURL擴展,這很可能。

+0

'curl_getinfo($ ch,CURLINFO_HTTP_CODE);'是獲取HTTP代碼的更好方法 –