掲示板にWWWC更新チェック用のファイルを出力させる


●目的

 WWWCとは、Nakashima Tomoakiさん製作のWindowsで動作するWebページの更新チェッカです。登録してあるWebページが更新されると通知してくれます。

掲示板などのCGIも登録する事ができますが、CGIは動的なファイルなのでアクセスされるたびにサーバ側でCGIが実行されてしまい、それだけサーバに負荷がかかってしまいます。更新チェックの際にもそれだけ時間がかかってしまいます。

そこで、あらかじめ生成しておいた更新チェック用の静的なhtmlにアクセスさせることによってサーバの負荷を軽減し、更新チェックにかかる時間も短縮する事ができます。

●CGIの改造

 どの掲示板に実装するかによって微妙に変わってくるので、ここではAX-BBSを例に説明していきます。やること自体は単純なので他の掲示板スクリプトにも十分応用きくと思います。(実装例

# ----------------
# WWWC META Check用ファイル生成
$wwwc = "wwwc.html"   # 出力するWWWC更新チェックファイル
sub make_wwwc {
    if (!open(OUT,"> $wwwc")) { &error('設定ミス',"wwwc用チェックファイルを新規作成できません.<br>パーミッションが正しく設定されているかご確認下さい.",1); }
    print  OUT "<html>\n";
    print  OUT "<head>\n";
    print  OUT "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\n";
    printf OUT "<META NAME=\"WWWC\" CONTENT=\"%02d/%02d %02d:%02d %s(%s) %s\">\n",$mon + 1,$mday,$hour,$min,$FORM{'name'},$FORM{'cor'}?'修正':'新規',$FORM{'subject'};
    print  OUT "<title>$title_b WWWC更新チェック</title>\n";
    print  OUT "</head>\n";
    print  OUT "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n";
    print  OUT "$title_b<br><br>\n";
    printf OUT "<a href=\"$script_name\">%02d/%02d %02d:%02d %s(%s) %s</a>\n",$mon + 1,$mday,$hour,$min,$FORM{'name'},$FORM{'cor'}?'修正':'新規',$FORM{'subject'};
    print  OUT "</body>\n";
    print  OUT "</html>\n";
    close(OUT);
    chmod (0666,"$wwwc");
}

使用している変数の説明(使用する掲示板スクリプトに応じて、適当に変数を拾ってきてください)

$wwwc 出力するWWWC更新チェックファイルの名前(直接指定可)
$mon, $mday, $hour, $min 投稿日時(WebForumみたいに投稿日時$dateとしてそのまま文字列で定義されていることもありき)
$FORM{'name'} 投稿者名
$FORM{'cor'} (このメッセージが)「修正」か「新規」かどうかのフラグ
$FORM{'subject'} 投稿記事のタイトル
$title_b ブラウザのタイトルバーに表示する文字(タグ無効、直接指定可)
$script_name この掲示板スクリプトのファイル名(直接指定可)
&error AX-BBS内部のエラー表示サブルーチン。実装する掲示板スクリプトにそれっぽいものが無ければ、何もせずにreturnで返してもいいと思います。

上にあるサブルーチンを、各掲示板スクリプトのメッセージを投稿して新しいログを出力した直後に呼び出してください。(ログ出力時に使用した変数を流用するためです^^;)

AX-BBSの場合だと axlib.pl の237行目辺り。サブルーチン自体は、アクセス時に呼び出すことになるスクリプトに記述するのが確実です(axbbs.cgi や wforum.cgi など)