掲示板のバックナンバーを自動生成させるには?

[上に] [前に] [次に]
ファイプラー弘樹 [E-Mail] [HomePage] 1997/12/03(水) 19:56:54
こんにちは。
このページで紹介されている掲示板を使っているのですが,
バックナンバーを自動生成するように改造したいのです.
例えば,月が変わったら「log9712.html」などと,
年月を含むファイル名でバックナンバーを自動的に生成したいのです.

アドバイスをお願いします.

takagi7 [E-Mail] [HomePage] 1998/02/23(月) 14:13:19
perlを勉強しておく必要が有るかと思います。
とほほさんの掲示板はperlで記述されていますので、それを改造すれば
ファイプラー弘樹さんのしたいことが簡単に実現できるのですが。
一つ上の、また他のページにないオリジナリティを目指すのであれば、
言語をマスタされることを薦めます。

B-Cus 1998/02/24(火) 06:36:47
> アドバイスをお願いします.

どういうふうにすればいいか、大体はわかってます?

何をしたらいいのかもわからない、というのなら
残念ながらtakagi7さんの言われるようにperlの
勉強を始めるのがいいと思います。


ま、テストも終って暇ですからヒントを出しましょう。
今は100以上は消えていくんですよね? だったら

・消えていくはずの101個目の書き込みの書き込み日時をチェック
・例えば98/01/12なら、log9801.htmlに追加

こんなもんでいかがですか。改造としては簡単なもんです。
もうちょい具体的にいきましょうか。新規書き込みがあると、

・wwwboard.tmpに新規メッセージを書き込む。
・wwwboard.tmpにこれまでのメッセージを追加。
 ここでは書き込み数をカウントし、100個のメッセージだけを
 追加する。よって101個目のメッセージは捨てられる。

てな処理をします。で、wwwboard.datは1メッセージ分を
5行で保存しています。
-------------
<TABLE><TR><TD>
メールやwebのリンク 日付
<BR>メッセージ
</TD></TR></TABLE>
<HR>
-------------
これで1つのメッセージを表しているわけです。

・・・・・・・あーもういいや、書いちゃえ。

if ($msgs++ >= $max_msgs) {
 last;
}



if ($msgs++ >= $max_msgs) {
 @rest=<IN>;
 $rest[0] =~ m|^.* (\d+)/(\d+)/\d+\(.*\) \d+:\d+:\d+$| );
 ($year,$mon,$day) = ($1,$2,$3);
 $file = "log${1}${2}.html";
 open(LOG,">>$file");
 print LOG "<TABLE><TR><TD>";
 print LOG @rest;
 close(LOG);
}

とすると log199801.html に保存されます。

・log199801.htmlではなく、log9801.htmlというファイル名にする。
 # もしかしたらlog199801.htmlでなく、log19981.htmlとなってしまう
 # かもしれない。
・先頭が一番古いメッセージになっているので、並びを逆順にする。
・log199801.htmlをブラウザで直接みることはできないので
 適切なヘッダ(<html><body>など)を付ける。
・動作チェックはしていないので、動かなかったら自分でなんとかする(^^;

は宿題です。


ファイプラー弘樹 [E-Mail] [HomePage] 1998/02/26(木) 01:54:31
[[解決]]
質問した者です。

結論から申しますと、質問した時からプロバイダを変更しまして、
サーバの容量の都合によりバックナンバーは別のサーバに置くように
しています。よって、バックナンバーの自動生成はあきらめました。

>B-Cusさんへ
B-Cusさんのヒントはとても参考になりました。
月が変わったらバックナンバーを生成するというよりも、
データファイル名自体を年月に合わせればいいわけですね(違うかな?)。

>takagi7さんへ
Perlの細かなことは知らないのですが、
スクリプトのある程度の改造はできるようになりましたので、
これからもページ作りにはげんでいきたいと思います。

#というわけで一応解決にしておきます。どうもありがとうございました。

B-Cus 1998/02/26(木) 05:34:46
> B-Cusさんのヒントはとても参考になりました。
> 月が変わったらバックナンバーを生成するというよりも、
> データファイル名自体を年月に合わせればいいわけですね(違うかな?)。

うーん、御理解いただけているかはこの文章からは
わからないのですが、要は捨てられていく101番目の
メッセージが

<TABLE><TR><TD>
メールやwebのリンク AAAA/BB/CC(月) 12:23:34
<BR>メッセージ
</TD></TR></TABLE>
<HR>

であればlogAAAABB.htmlに追加していく、ということです。

もちろん、101個目を捨てないで無限にためこんでおいて、

> 月が変わったらバックナンバーを生成する

のもいいでしょう。負荷と管理のしやすさを考えて最適な
方法を選択してください。


> サーバの容量の都合によりバックナンバーは別のサーバに置くように
> しています。

ファイルを圧縮してみる、というのも手です。

open(IN,"gzip -dc wwwboard.txt.gz|");
open(OUT,"|gzip -c > wwwboard.tmp.gz");
print OUT <IN>;
system("cp wwwboard.tmp.gz wwwboard.txt.gz");

とかね。とはいえ、くれぐれも負荷のかけすぎにはご注意を。

匿名希望 1998/03/26(木) 05:42:50


匿名希望 1998/03/26(木) 07:37:57


[上に] [前に] [次に]