ネットにあるサンプルを動作させてみる
・掲示板 その4 - CGI(Perl)の基本と掲示板作成 - ポンクソフト
上記の掲示板CGIを動作させてみます。
当サイトの著作物(ソフトウェア及び文書)は全てMIT Licenseとします。改造・再配布・商用利用、ご自由にどうぞ。
お問い合わせ - ポンクソフト
ちなみに、上記のソースのライセンスはMIT Licenseとなってます。
ソースを一部変更
print "Content-type: text/html; charset=Shift_JIS\n\n";
↑ 修正前
↓ 修正後
print "Content-type: text/html; charset=UTF-8\n\n";
UTF-8、改行コード(LF)のテキストで保存する =>スターサーバーにアップロード
cgi-lib.pl
上記の掲示板CGIでは、cgi-lib.plが用いられているので、別途用意する
上記のサイトから、「Version 2.18 」のcgi-lib.plをDLしてきて、それをそのまま、スターサーバーにアップロード
その他
その他は、掲示板CGIが掲載させている通りにする
・cgi-lib.pl 、パーミッションは変更しないでOK
・bbs4.cgi パーミッションを755
・bbs4.txt 空ファイル、、パーミッションを666
この3つのファイルで動作します。
改造版を作ってみる
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use CGI;
# 掲示板 その4 改造版
print "Content-type: text/html; charset=UTF-8\n\n";
# フォーム部分を表示する
print <<EOF;
<html>
<body>
<h2>掲示板</h2>
<form method="post" action="bbs4.cgi">
<p><label>タイトル </label><input type="text" name="title" size="40"/></p>
<p><label>メッセージ </label><textarea name="message" cols="60" rows="5"></textarea></p>
<p><label>お名前 </label><input type="text" name="namae" size="30"/></p>
<p><label>e-mail </label><input type="text" name="mail" size="30"/></p>
<p><label>削除キー </label><input type="password" name="delkey" size="10"/></p>
<p><input type="submit" name="write" value="送信"/></p>
<hr/>
記事番号:<input type="text" name="delno" size="10"/>
削除キー:<input type="password" name="delkey2" size="10"/>
<input type="submit" name="delete" value="削除"/>
</form>
<hr/>
EOF
$form = CGI->new;
# フォームの値を取得
$namae = $form->param('namae');
$mail = $form->param('mail');
$title = $form->param('title');
$message =$form->param('message');
$delkey = $form->param('delkey');
# ログファイル読み込み
open(IN, "bbs4.txt");
@log = <IN>;
close(IN);
# フォームからの書き込みのときは書き込み処理を行なう
if ($form->param('write')) {
# タグの無効化
&deltag($namae);
&deltag($mail);
&deltag($title);
&deltag($message);
&deltag($delkey);
# 改行を<br>に変換
$message =~ s/\r\n/<br>/g; # Windows系(\r\n)
$message =~ s/\r/<br>/g; # Mac系(\r)
$message =~ s/\n/<br>/g; # UNIX系(\n)
# 現在時刻を取得
$time = `date +'%Y/%m/%d %T'`;
chop $time;
#記事番号は前の番号+1
($no) = split(/\t/, $log[0]);
$no++;
# ログ先頭に書き込み内容を格納
unshift @log, "$no\t$delkey\t$namae\t$mail\t$title\t$message\t$time\n";
# ログ最大数を30件に制限
splice @log, 30;
}
# フォームからの削除のときは記事削除処理を行なう
if ($form->param('delete')) {
for ($i = 0; $i <= $#log; $i++) {
($no, $delkey) = split(/\t/, $log[$i]);
if ($no eq $form->param('delno') and $delkey eq $form->param('delkey2')) {
splice @log, $i, 1;
break;
}
}
}
if ($form->param('write') or $form->param('delete')) {
# ログファイルにロックをかけて書き込み
open(OUT, "+< bbs4.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT @log;
close(OUT);
}
# ログ表示
foreach $data (@log) {
chop $data;
($no, $delkey, $namae, $mail, $title, $message, $time) = split(/\t/, $data);
print "No.$no $title";
print " 投稿者:";
if ($mail ne "") {print "<a href='mailto:$mail'>";}
print $namae;
if ($mail ne "") {print "</a>";}
print " 投稿時刻:$time";
print "<br><br>\n";
print "$message<br>\n";
print "<hr>\n";
}
print "</body>\n</html>\n";
# タグを除去するサブルーチン
sub deltag {
$_[0] =~ s/</</g;
$_[0] =~ s/>/>/g;
}
参考:
・掲示板 その4 - CGI(Perl)の基本と掲示板作成 - ポンクソフト
・https://ja.wikibooks.org/wiki/Perl/CGI
・cgi-lib.plの代わりに、標準ライブラリーに変更
・HTML出力のタグのところを変更
cgi-lib.plは、フォームの値を取得のところに使用しているので、その部分だけ書き換えます。ほんの少し変更するだけで、対応できます。
前:$form{
後:$form->param
上記のキーワードの部分をみれば、修正方法がわかるかと思います。
補足
この掲示板CGIですが、動作はしますが、サンプルだと思います。たとえば、すべて未入力でも投稿できてしまいます。
コメントを残す