メモリを上手に使った掲示板
私は、ほとんど同じ方法で、
> ・別ファイルに投稿数を記録しておく
の代わりに
open(FILE, "FILENAME");
$count++ while(<FILE>);
close(FILE);
とやっています。遅くなるかと思いきや案外そうでもなく、
数万件の書き込みをすべて保存しているBBSで、特にスピ
ードに問題なく安定して運用できています。
@comments = reverse(<FILE>);
では、100件ならOKかもしれませんが数万件は無理でしょ
う。そうでなくても上のようなコードはリソースを無駄に
食うので自分のサイトでリソースが余りまくってるならと
もかく、プロバイダなどではやらない方が良いでしょう。
さて、私は表示させる際には、具体的には以下のようなコ
ードを使っています。
------------------------------------
$lpp = 10; # 1画面当たりの投稿数
$page = int($param{'page'}) || 1; # 表示したいページを取得(1ページ目なら1)
$page = $page < 1 ? 1 : $page; # 0以下になるのを防ぐ。
open(FILE,$database); # 投稿ファイルをオープン
$count++ while (<FILE>); # 総投稿数を数える
return unless ($count); # 投稿がなければ終了
$first = $count - ($page - 1) * $lpp; # 表示したいページの先頭の投稿の行番号
$skip = $first - $lpp; # スキップしなければならない行数
$skip = $skip < 0 ? 0 : $skip; # スキップする行数がマイナスになるのを防ぐ
$lines = $first - $skip; # 実際に表示される投稿の数 0 < $lines <= $
lpp
seek(FILE,0,0); # ファイルを巻き戻す
<FILE> while($skip--); # 目的の行まで読み飛ばす
push(@line,scalar(<FILE>)) while($lines-- > 0); # 必要なだけ@lineに押し込む。
close(FILE);
foreach(reverse @line){
# 表示ルーチン
}
------------------------------------
てな感じです。