[PHP-users 2247] Re: テキストファイルで掲示板

Osamu Shigematsu php-users@php.gr.jp
Wed, 26 Sep 2001 12:55:16 +0900


重松です。ebi さん、はじめまして。

> 現在Perlでやっている事をPHPでも行いたいのですが
> どのようにして良いのか分かりません。

私は Perl がわかりませんので、この件はお力になれないと思いますし、移植の「依
頼」なら、それなりのところにそれなりの費用を払って依頼するのがスジってもんで
しょう。どうも、Perl のソースを示すから、移植して、って読めます。;-)

> PostgreSQLをつかったサイトの構築といった内容の書籍や
> サイトはたくさん見つけたのですが
> 私の場合、PHPの利用目的がカウンターや小規模の複数掲示板なので
> わざわざPostgreSQLにアクセスするよりもテキストファイルの方が
> 負荷がかからなくてすむと思ったからです。

これについては、PostgreSQL が使えない、データベースのインストールや保守自体
が煩雑、というようなニーズもあると思いますが、アクセスが集中したときの排他制
御の問題や、データ件数が増えたときの拡張性、速度、あらゆる面で使える環境なら
使った方が楽、と思うのですが。

> Perlの場合のソース

http://www.php.gr.jp/ からマニュアルが読めますので、読んで頂く、あるいは関数
リファレンスが欲しくて買いほどの価値があるか謎ですが、雨後の竹の子のごとくぞ
ろぞろと、オンラインマニュアルに毛が生えて CD がついた程度の書籍が沢山見かけ
られますので、必要とあらば購入されても良いかと思いますが、

> ($name に名前 $mail にメール $com にコメントが入っています。)
> open DATS, "+<./bbs.dat";
> #ファイルロック
> flock(DATS,2);
> #頭に追加する為、全部読み込みSeek
> @dats = <DATS>;
> seek(DATS,0,0);
> #先頭のキーIDの数値を1足す
> $keyid = ((split/\t/,$dats[0])[0]) + 1;
> #改行を<BR>に変換
> $com =~s/\r\n/<BR>/g;
> $com =~s/\n/<BR>/g;
> #新規投稿を追加
> print DATS "$keyid\t$name\t$mail\t$com\t-\n";
> #最大30件なので29件書き込む(データが無い場合はぬける)
> for($i=0;$i<=28;$i++){
> last unless $dats[$i];
> print DATS $dats[$i];
> }
> truncate(DATS,tell(DATS));
> close(DATS);

$bbs = './bbs.dat'
if($fp = fopen($bbs, 'r+'))){
    if(!flock($fp,6)){
        $dats = fread($fp,filesize($bbs)); // 美しくない
        $dats = explode('\n',$dats); // 美しくない
        rewind($fp);
        $tmp = explode('\t',$dats[0]); // split は低速
        $keyid = $tmp[0] + 1;
        $com = nl2br($com); // 専用の関数あり
        fputs($fp,"$keyid\t$name\t$mail\t$com\t-");
        $i_max = min(count($dats),29);
        for($i=0; $i < $i_max; ++$i)
            fputs($fp, implode('\t',$dats[$i]));
        flock($fp,3);
    }
    fclose($fp);
}

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp