[php]get_headersを使ってデッドリンクを調べる
ソーシャルブックマークに追加:
気が向いたので、
get_headers
を使ってデッドリンクを調べるものを作ってみました。
まず、
get_headers
はヘッダを取得するもので
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 29 May 2004 12:28:13 GMT
[2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
[3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
[4] => ETag: "3f80f-1b6-3e1cb03b"
[5] => Accept-Ranges: bytes
[6] => Content-Length: 438
[7] => Connection: close
[8] => Content-Type: text/html
)
こんなのが返ってきます。
なので、[0]を見ればデッドリンクかわかるので、
function deadlink($uri){
$head = get_headers($uri,1);
$response = $head[0];
if (!preg_match('/Not Found/',$response)){
//生きてるYO!!
return false;
}else{
//死んでるYO!!
return true;
}
}
こんな感じにして、
これを、使って
function deadlchk(){
$uri=$_GET['uri'];
$arr=array();
//そのHTMLのURLリストを取得
preg_match_all("/(https?:\/\/[^\"]+)/i" ,file_get_contents($uri), $arr1);
foreach($arr1[0] as $arr1_one){
//配列に。
array_push($arr,$arr1_one);
//ちょっと休憩
sleep(2);
//HTML取得
preg_match_all("/(https?:\/\/[^\"]+)/i" ,file_get_contents($arr1_one), $arr2);
//グルグル
foreach($arr2[0] as $arr2_one){
array_push($arr,$arr2_one);
}
}
//重複削除
$arr = array_unique($arr);
for($ii=1;$ii<count($arr[0]);$ii++){
sleep(2);
$uri=$arr[0][$ii];
if($this->deadlink($uri)){
echo "死んでるYO!! " . htmlspecialchars($uri) . "<br>";
}else{
echo "生きてるYO!! " . htmlspecialchars($uri) . "<br>";
}
}
}
こんな感じでとりあえず、したいことが出来ました。