CGIの改造(中級編4)です。今回はファイル操作です。
普通のCGIはファイルに書き込んだり読み込んだりします。
これを知らないと掲示板を作れないということですね。
open(IN,"text.log"); @line = <IN>; close(IN); |
まずは「open」でファイルを開けます。
その時についている「IN」ですが、ファイルハンドルと呼ばれるもので、
要するに、複数のファイルを同時に読み込む時に識別する名前ですね。
なまえのなので、かってに付けても問題ないです。(一般的には大文字を使いますけど)
次に@lineという配列に読み込んだtext.logを格納します。
この時、一行で1つの値となります。
例えば、「名前,メールアドレス,コメント」というのが一行だとすると、後でsplitを使い分割することになります。
最後に、開けたものは閉めましょう。ってことで、「close」で閉めます。
では実際に書きこむ場合はどうなるでしょうか。
書きこむ場合は2つあると思ってください。
一つは追記モード。
もう一つは普通に書き込みモード。
まずは追記モードから。
open(OUT,">>text.log"); print OUT @line; close(OUT); |
先ほどの読み込みと同じような感じなのですが、ビミョウに違います。
まずopenで開けることは同じですが、読み込むファイルの左に「>>」がついています。
(ファイルハンドルはどうでもいいです)
これが追記モードの合図です。
この状態でファイルを開け、書きこむよ〜と宣言しています。
次に「print」で書き込むよぉ〜と言っています。ファイルハンドルは正しいものにしないと書き込めません。当然。
追記モードで開くと、text.logの最後に@lineというものを追記する形になります。
最後にファイルを閉じます。
次は普通に書き込みモードです。
open(OUT,">text.log"); print OUT @line; close(OUT); |
普通に書き込むときは「>」です。
この時注意するのは、「open(OUT,">text.log");」として開けると、
text.logの中身はすべて消えるということです。
なので、あらかじめ読み込んで、配列に中身をいれてから開けないと、中身が消失します。
後は普通に書き込んで閉めます。
実際普通に書きこむほうが多いですね。
こんなやり方しますよという例を書いておきましょうか。
$file = 'text.log'; $name = 'aa'; $mail = 'aa@aa.aa'; $comment = 'あいうえお'; open(IN,"$file"); @line = <IN>; close(IN); unshift(@line,"$name,$mail,$comment,\n"); open(OUT,">$file"); print OUT @line; close(OUT); |
$file 一般的に使うファイルは変数にいれて置く
$name $mail $comment 掲示板などで取得するものと思ってください。
IN 中身を読み込んで、@lineの中に入れます。
unshift で@lineの一番上に文字列を入れます。
最後に「\n」で改行をいれます。これがないと一列になってしまうので。
OUT で、書き込みます。
こんな感じでわかったかなぁ?
当然のことながら、CGIの改造は各自の責任においてやってください。
いいこと以外は私は聞く耳持ちませんから。