【超シンプル掲示板】 (エラー処理、繰り返し処理、サブルーチン化も行わない)
| 【ソース】 board1.cgi |
【解説】 |
- #!/usr/local/bin/perl
-
- #書き込まれた内容を保存するファイル名
- $datafile='data.html';
- print "Content-Type: text/html\n\n";
-
- #送られてくる文字列の長さ
- $length=$ENV{'CONTENT_LENGTH'};
-
- #長さ分だけ標準入力から読み込む
- read(STDIN, $buffer, $length);
-
- #文字列ごとに分割する
- ($shimei,$e_mail,$hp_ad,$kotoba)=split( /&/ , $buffer);
-
- #フォーム名と内容に分割する
- ($name,$value1)= split( /=/ , $shimei);
- ($tel,$value2)=split( /=/ , $e_mail);
- ($tel,$value3)=split( /=/ , $hp_ad);
- ($tel,$value4)=split( /=/ , $kotoba);
-
- #フォームから送られたデータにスペースがあると、
- #プラス(+)に置き換えられるので、
- #スペースにしたままにする変換処理をする
- $value1=~ tr/+/ /;
- $value2=~ tr/+/ /;
- $value3=~ tr/+/ /;
- $value4=~ tr/+/ /;
-
- #フォームから送られたデータの特殊文字や日本語などは
- # % に続く2桁の16進数に置き換えられるので、
- #それを変換しなおす処理をする
- $value1=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- $value2=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- $value3=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- $value4=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
-
-
- #データファイルを追加書き込みモードで開く
- open(FILE,">>$datafile");
-
- #新規に書き込まれた内容をファイルに追記する
- print FILE "<P><HR>氏名:$value1/メールアドレス<a
- href=\"mailto:$value2\">$value2</a>/ホームページ<a
- href=\"$value3\">$value3</a><BR><本文><BR>$value4\n";
-
- #ファイルを閉じる
- close(FILE);
-
- #追記された書き込みを全部表示する
-
- #データファイルを読み込み専用モードで開く
- open(FILE,"$datafile");
-
- #内容をブラウザに表示する
- print <FILE>;
-
- #ファイルを閉じる
- close(FILE);
-
- exit;
|
5.ブラウザに表示するおまじないは付けておく
40.「 >>$ファイル名 」追加書き込みモード
41.「" "」で囲まれた内容を
指定したファイルに書き込む
53.「 $ファイル名 または <$ファイル名 」
読み込み専用モード
|
open(FILE,"$datafile");
open関数の2番目の因数「$datafile」の書き方によって
ファイルを開く時のモードを設定できる
| >$ファイル名(ファイルハンドル) |
データ書き込み専用モード |
| $ファイル名 または <$ファイル名 |
データ読み込み専用モード |
| +<$ファイル名 または +>$ファイル名 |
データの読み書き両用モード |
| >>$ファイル名 |
データ追加書き込みモード |
もっと細かくいうと
| mode |
Read |
Write |
意味 |
| 省略 |
〇
|
× |
読み込み専用 |
| < |
〇 |
× |
読み込み専用 |
| > |
× |
〇 |
書き込み専用(ファイルが存在しない場合は新規に作成する。存在する場合は内容を削除後上書き) |
| >> |
× |
〇 |
ファイルの最後に追加書き込み |
| +< |
〇 |
〇 |
読み書き用(ファイルが存在しない場合はエラーになる) |
| +> |
〇 |
〇 |
読み書き用(ファイルが存在しない場合は新規に作成する。存在する場合は内容を削除後上書き) |
■通常、ファイル名(パス)を変数に代入してから、OPENする。
相対パスで指定しておけば、別のサーバーに移動した場合でもパスの指定を変更する必要がない
■同じディレクトリにある場合でも、ファイル名だけにせず、カレントディレクトリを示す「./」を付けた方が
本当は良いらしい。
$fileName = "./data.html";
open( FILE, "+<$fileName" ); |
|