この記事について
| 環境 | 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エラーは回避できなかった。
