PHPでURLがリンク切れか調べる【get_headers】

この記事について

環境PHP5以降
目的URLがリンク切れ(404)か調べる
結果get_headersでHTTPヘッダを取得し、添字0のステータスコードを見る

つまずきポイント要約

  • URLに半角スペースがあるとリンクがあっても404が返る→rawurlencodeで%20に置き換える
  • urlencodeだと半角スペースが「+」になり404を回避できなかった

PHPでURLがリンク切れか調べるには、get_headers関数でHTTPヘッダを取得する。(PHP5で追加された)

リンク切れ(404エラー)を調べるサンプルコード

$head = get_headers($url); // HTTP リクエストに対するヘッダを取得する


$kekka = $head[0]; //添字0がステータスコード

echo $kekka;
//404エラーの場合「HTTP/1.1 404 Not Found」と表示される

404エラー時にファイル書き込む場合

if(stristr($head[0],"404")) {

//ファイルに書き込む
$fp = fopen("404list.txt", "a"); //aは追記
fwrite($fp, "404エラーです");
fclose($fp);

}

但し、URLに半角スペースが使われていると、リンクがあっても404エラーが返ってくる。これを回避するためには、rawurlencodeで半角スペースを「%20」に置き換える必要がある。
urlencodeを使うと半角スペースは「+」に置き換わるが、これだと404エラーは回避できなかった。

関連記事

タイトルとURLをコピーしました