Cool Note 2 更新時刻ファイル吐き出し改造 2003/06/12 陣来霧  アンテナ系サイトなどに Cool Note 2 を捕捉してもらう時に、 更新時刻をはき出したテキストファイルを対象にチェックをかけて もらうと、CGI を直接叩きに行くよりも遙かにサーバ負荷が減ります。  独自改造で実装しているものですが、ニーズがあるかも知れないので 公開します。  ファイルの更新時刻を対象にするか、あるいはファイルに記述された 時刻を読み取ってもらうかで更新時刻の取得が可能です。  なお、アンテナだけでなく、WWWC などの更新時刻取得エージェント でも利用できます。  バージョン 3.2b で動作を確認しています。 ■setup.pl ・「その他ファイル設定」セクションに以下の項目を追加。 # 最終更新時刻ファイル $updlog = './updtime_note.txt'; ・後ろの方(関数の間の適当なところ)に以下の関数を追加。 # 時刻をフォーマットに揃えて出力___________________________ sub format_time { $ENV{'TZ'} = "JST-9"; local($sec,$min,$hour,$mday,$mon,$year) = localtime(time); # 日時のフォーマット local($date) = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year+1900,$mon+1,$mday,$hour,$min,$sec); return ($date); } # 最終更新時刻をファイルへ書き出し_________________________ sub set_lastupdate { local($upddata) = &format_time; open(UPD,"+<$updlog"); eval 'flock(UPD,2);'; truncate(UPD,0); seek(UPD,0,0); print UPD $upddata; close(UPD); } ■c_note.cgi、i-mode.cgi  ここからは、2 つの選択肢があります。 ・書き込みの時だけ最終更新時刻を反映。 ・修正や削除の時も最終更新時刻を反映。 ●書き込みの時だけ最終更新時刻を反映する場合  それぞれの cgi ファイルから「新規書き込み処理」の関数(regist)を探し、 その中からさらに以下の箇所を探して直後に一文を追加する。 &log_save;   ↓ &log_save; &set_lastupdate; ●修正や削除の時も最終更新時刻を反映する場合  c_note.cgi と i-mode.cgi はいじらずに、setup.pl の以下の関数を変更する (末尾に「&set_lastupdate;」を追加)。 sub log_save { open(LOCK,">$log_fol/log_$lock_file"); eval { flock(LOCK,2); }; open(TMP,">$log_fol/log_$log_tmp") || &error("ログ一時ファイルに書き込めません。"); print TMP @new; close(TMP); rename("$log_fol/log_$log_tmp","$log_fol/$log_file") || &error("ログファイルに書き込めません。
ログファイルのパーミッションを確認してください。"); unlink("$log_fol/log_$lock_file"); eval { flock(LOCK,8); }; close(LOCK); }   ↓ sub log_save { open(LOCK,">$log_fol/log_$lock_file"); eval { flock(LOCK,2); }; open(TMP,">$log_fol/log_$log_tmp") || &error("ログ一時ファイルに書き込めません。"); print TMP @new; close(TMP); rename("$log_fol/log_$log_tmp","$log_fol/$log_file") || &error("ログファイルに書き込めません。
ログファイルのパーミッションを確認してください。"); unlink("$log_fol/log_$lock_file"); eval { flock(LOCK,8); }; close(LOCK); &set_lastupdate; }  あとは、cgi のアップロード前に、cgi と同じフォルダに「updtime_note.txt」 という空のテキストファイルをパーミッション 666 でアップして、cgi をアッ プすればオッケー。ログを変更する操作を行った直後に、テキストファイルをブ ラウザから見てみてください。