質問: DB内にあるサイト情報のリンクのチェックを行いたく、質問しています。 リンク切れチェックにはいくつかやり方があると思いますが、最適な方法が判断できません。 ざっと思いつくのは 1. ヘッダーに404が返ってくるものをリンク切れと判断する 2. ヘッダーに200が返ってくるものをリンクが存在していると判断する 3. コンテンツを入手して、title等があるかチェックする 等ですが、問題点もそれぞれ多そうです。。。 需要もありそうなので検索してみたのですが、「最適」と言えそうな解に辿りつけませんでした。 一般的にはどのようなやり方で実現するのでしょうか? 可能であれば考慮点も合わせてご教示いただけると幸いです。 想定している利用環境は ・php 5.6 ・フレームワーク codeigniter 3.0 です。 よろしくお願いします。
回答: 対象とするサイト次第です.そのサイトがリンク切れのときにどういう動きをするのかをあらかじめ知った上で書くべきでしょう.**例えばTwitterは凍結アカウントのページにアクセスしたとき,`302`リダイレクトにて,`200`で凍結を示すページに移動する**という特異な動きをします. **「リンク切れ」**という判断基準であれば, `Location`は自動で追跡する前提で 1. `404`または`410`ならばリンク切れと自動判断 2. `408`または`5xx`ならば再試行により再現性を確認した上で一時的な障害と自動判断 3. それ以外の`4xx`ならばリンク切れとは言えないかもしれないが無効なURLと自動判断 4. `1xx`,`200`以外の`2xx`,`Location`のない`3xx`ならば人間の目で判断 (普通はあり得ない) 5. `200`ならば目的とするHTML要素のパースを行い,意図したものが得られなくなっていたら人間の目で判断 (`200`でもエラーを読み取れるようであれば自動判断させることも可能) これぐらいでしょうか.