トップ > Perl Tips > 簡単な掲示板を作ろう!


 ■ 簡単な掲示板を作ろう!

ファイルの読み書きを読んでない方は先にお読みください。

今回は掲示板を作ろうと思います。
たいした機能はないのですが、
入力チェック・タグのチェックなどはできるようにしました。
実際に使うには物足りないですが、Perlの学習はできるようになっています。

スクリプトはHTML表示用CGIと書き込み用CGIに分けます。

<サンプル>
今回は長くなりますので別のファイルになっています。

HTML表示用CGI(bbs.cgi とする)
書き込み用CGI(reg.cgi とする)

そのほかにjcode.pl と、bbs.log という空ファイルを用意してください。

<解説>

HTML表示用CGI

if (!open(IN,"bbs.log")) { &fileerror; }
flock(IN, 1);
@file = <IN>;
close(IN);

if (!open(IN,"bbs.log")) { &fileerror; }
ファイルを開くが、開けなければエラーとする。
最後のエラーのサブルーチンへ飛びます。

if (! …
で、もし…でなければ

flock(IN, 1)
ファイルをロックします。
ロックというのはファイルの読み書き中にほかの人から読み書きできなくするものです。

最後の数字を変えるとこうなります

1 読み込み宣言ロック(ブロックモード)
2 書き込み宣言ロック(ブロックモード)
5 読み込み宣言ロック(非ブロックモード)
6 書き込み宣言ロック(非ブロックモード)
8 ロック解除(アンロック)

宣言ロックというのは「私が読み書きするから、ほかの人は読み書きするな」
という命令で、
ブロックモードでは、自分がロックをかけることができる状態になるまで、
プログラムが一時停止して、
非ブロックモードでは、自分がロックをかけることができたか、
できなかったらすぐに真または偽を返す ということです。
ちなみに 8 で解除の命令を出さなくても、ファイルを"close"すれば、
ロックも解除されます。

@file = <IN>;
ファイルの内容をすべてメモリに入れます。

close(IN);
これでファイルを閉じてください。


書き込み用CGI

最初に設定をしてください。
URLは http:// から始まるアドレスを設定してください。

$value =~ s/A/B/g;
というのが出てきますが、
これは置換演算子といって、AをBに置き換えるという意味です。
たとえば
$value =~ s/</&lt;/g;
であれば < を &lt; にかえる。すなわち、タグの変換ですね。
$value =~ s/\n/<BR>/g;
であれば \n(改行)を <BR>(HTMLの改行)にするという意味です。
\n をそのまま放置しておくとログがおかしくなります。
> は < の逆、\tはタブ、\rも改行です。

デコードした後、$FORM{$***} に代入します。

未入力確認ですが、
サブルーチンの後についている ('***')
ですが、この***を引数といい、
このデータをこの下の未入力エラー表示というところで
$_[0]から呼び出します。
そうすると、「お名前 が入力されていません」などと表示されます。

if (!open(IN,"bbs.log")) { &fileerror; }
flock(IN, 1);
@DATA = <IN>;
close(IN);

if (!open(OUT,">bbs.log")) { &fileerror; }
flock(OUT, 2);
unshift (@DATA,$log);
print OUT @DATA;
close(OUT);
print "Content-type: text/html\n";
print "Location: $url" . '?' . "\n\n";

ファイルを開いて、データをメモリに入れ、
データの先頭に新しく投稿されたデータを入れ、書き出し、
Location: で元の表示画面に戻します。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/35

コメント

掲示板を作りたいです

投稿者 mei : 2008年9月 1日 11:56

テストさせて下さい。

投稿者 とくめい : 2008年9月23日 11:50