名 前(ハンドル名)
 
メールアドレス
 
URLアドレス
 
コメントをどうぞ
 



【超シンプル掲示板】 (エラー処理、繰り返し処理、サブルーチン化も行わない)

【ソース】 board1.cgi 【解説】
  1. #!/usr/local/bin/perl
  2. #書き込まれた内容を保存するファイル名
  3. $datafile='data.html';
  4. print "Content-Type: text/html\n\n";
  5. #送られてくる文字列の長さ
  6. $length=$ENV{'CONTENT_LENGTH'};
  7. #長さ分だけ標準入力から読み込む
  8. read(STDIN, $buffer, $length);
  9. #文字列ごとに分割する
  10. ($shimei,$e_mail,$hp_ad,$kotoba)=split( /&/ , $buffer);
  11. #フォーム名と内容に分割する
  12. ($name,$value1)= split( /=/ , $shimei);
  13. ($tel,$value2)=split( /=/ , $e_mail);
  14. ($tel,$value3)=split( /=/ , $hp_ad);
  15. ($tel,$value4)=split( /=/ , $kotoba);
  16. #フォームから送られたデータにスペースがあると、
  17. #プラス(+)に置き換えられるので、
  18. #スペースにしたままにする変換処理をする
  19. $value1=~ tr/+/ /;
  20. $value2=~ tr/+/ /;
  21. $value3=~ tr/+/ /;
  22. $value4=~ tr/+/ /;
  23. #フォームから送られたデータの特殊文字や日本語などは
  24. # % に続く2桁の16進数に置き換えられるので、
  25. #それを変換しなおす処理をする
  26. $value1=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  27. $value2=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  28. $value3=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  29. $value4=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  30. #データファイルを追加書き込みモードで開く
  31. open(FILE,">>$datafile");
  32. #新規に書き込まれた内容をファイルに追記する
  33. print FILE "<P><HR>氏名:$value1/メールアドレス<a
  34. href=\"mailto:$value2\">$value2</a>/ホームページ<a
  35. href=\"$value3\">$value3</a><BR><本文><BR>$value4\n";
  36. #ファイルを閉じる
  37. close(FILE);
  38. #追記された書き込みを全部表示する
  39. #データファイルを読み込み専用モードで開く
  40. open(FILE,"$datafile");
  41. #内容をブラウザに表示する
  42. print <FILE>;
  43. #ファイルを閉じる
  44. close(FILE);
  45. exit;




5.ブラウザに表示するおまじないは付けておく


































40.「 >>$ファイル名 」追加書き込みモード

41.「" "」で囲まれた内容を
  指定したファイルに書き込む









53.「 $ファイル名 または <$ファイル名 」
  読み込み専用モード

open(FILE,"$datafile");
open関数の2番目の因数「$datafile」の書き方によって
ファイルを開く時のモードを設定できる

>$ファイル名(ファイルハンドル) データ書き込み専用モード
$ファイル名  または <$ファイル名 データ読み込み専用モード
+<$ファイル名 または +>$ファイル名 データの読み書き両用モード
>>$ファイル名 データ追加書き込みモード
もっと細かくいうと
mode Read Write 意味
省略

× 読み込み専用
< × 読み込み専用
> × 書き込み専用(ファイルが存在しない場合は新規に作成する。存在する場合は内容を削除後上書き)
>> × ファイルの最後に追加書き込み
+< 読み書き用(ファイルが存在しない場合はエラーになる)
+> 読み書き用(ファイルが存在しない場合は新規に作成する。存在する場合は内容を削除後上書き)

■通常、ファイル名(パス)を変数に代入してから、OPENする。
 相対パスで指定しておけば、別のサーバーに移動した場合でもパスの指定を変更する必要がない

■同じディレクトリにある場合でも、ファイル名だけにせず、カレントディレクトリを示す「./」を付けた方が
 本当は良いらしい。
$fileName = "./data.html";
open( FILE, "+<$fileName" );