修正内容は、主に次の3点です。

  • get_file_contents()はphp.iniの設定に依存するため、fsockopen()に変更
  • HTTPステータスコードが301と302のときは、リダイレクト先をチェック(fsockopenの影響で必要になった処理)
  • 明らかに自ドメインの場合のみ取得ソースをecho(入力パラメータ$urlが”/”を含まない場合、末尾に付加)
XSS対策を施しましたので、配布を再開します。

取り急ぎのバージョン0.2、0.3、0.3bにもXSSの脆弱性が残存していました。
Yuriko様から再びのご指摘をいただき、修正しました。

なお、このバージョン0.3bでは、feed等のXMLを対象としたリンクチェックが不完全な状態です。この不具合よりも、XSS対策版を優先すべきという観点で、リリースさせていただきます。

使い方

  1. dead-link-checker.0.3b.zipをダウンロード
    (最新版はhttp://typista.it-creates.com/wp-content/uploads/dead-link-checker.zip)
  2. プラグインディレクトリに解凍
  3. ダッシュボードからアクティベート
  4. リンクチェックの実行は、「ダッシュボード」→「設定」→「Dead Link Checker Plugin」→「start」ボタン。

以上で、bloginfo(“url”)からリンクを辿り、リンクチェックを開始します。中断も可能です。
正常なページは、一覧から消えていき、エラーの場合は、HTTPステータスコードとそのリンクを含むURL(非同期の複数コネクション実行のため、最新1つで上書き)も表示します。

制限事項

前述のとおり、本バージョンでは、feed等のチェックが不完全です。この不完全ですが、JavaScriptエラーで処理が中断してしまいますので、同時セッション数は、3以上が良いかも知れません。(自サイトのチェックの場合、feedとatomの2つでセッション中断で以降のチェックが進みません。)前バージョンでは正しくチェックされていた(と思われます)ので、今回の処理変更との影響を調査中です。
しばらくお待ちください。
jQuery(JavaScript)を利用したチェックのため、このプラグインでのエラー検知が万全ではないようです。
これは、(予想の域を越えませんが)jQuery、というよりJavaScript(?)では、クロスドメインでのHTTP通信不可のため、擬似的にサーバサイドで回避(*1)しています。この対処(出力)が万全でないのかも知れません。
また、現状ではハイパーリンクのみの抽出のため、JSやCSSは対象外です。

今後の対応

大きな機能追加要件として、被リンクゼロチェック機能、つまりどこからもリンクされていない画像等を抽出する機能を想定しています。が、これはかなり難航するかも知れません。
小粒要件としては、JSやCSSのデッドリンクチェックへの対応です。formへの対応は決めかねています。
その他、チェック結果表示のポップアップウィンドウ化 or iframe化や体裁、それらのオプション設定などなどです。