#!/usr/local/bin/perl # 先定義留言寫入的 HTML 檔案位置及名稱 $gbkhtml="/var/www/html/gbk.html"; # 設定留言板的 URL 位址 $gbkurl="http://主機/gbk.html"; # 取得表單傳遞過來的內容 read(STDIN, $temp, $ENV{'CONTENT_LENGTH'}); @pairs=split(/&/,$temp); foreach $item(@pairs) { ($key,$content)=split (/=/,$item,2); $content=~tr/+/ /; $content=~ s/%(..)/pack("c",hex($1))/ge; $OLS3{$key}=$content; } #經過上述動作,此時留言者姓名及內容,已分別放在 $OLS3{'name'} 及 $OLS3{'comment'} 中 $name=$OLS3{'name'}; $comment=$OLS3{'comment'}; # 處理斷行問題 $comment=~ s/\cM\n/
\n/g; # 取得留言時間 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(time+8*60*60); if (length ($min) == 1) {$min = '0'.$min;} if (length ($sec) == 1) {$sec = '0'.$sec;} $mon+=1; $date="$mon/$mday/$year, $hour:$min:$sec"; # 開啟HTML檔, 並讀出所有的內容 open(FHD, "$gbkhtml") || die "Content-type: text/html\n\n 開啟檔案錯誤!\n"; @all=; close(FHD); # 重新開啟HTML檔, 以便更新其留言內容 open(FHD, ">$gbkhtml") || die "Content-type: text/html\n\n 開啟檔案錯誤!\n"; # 利用迴圈, 將原檔案內容依次寫回, 並在其過程中寫入新的留言 foreach $line(@all) { # 該列是否為標記? 若是, 表示該處為新留言開始要寫入的地方 if ($line =~ //) { # 寫回原來的標記, 以後方可繼續使用 print FHD "\n"; # 寫入新的留言 print FHD "姓名: $name [時間: $date]

$comment


\n"; } else { # 若該列不是標記, 表示是舊有的內容, 則不予改變地將它寫回 print FHD $line; } } # 關畢 HTML 檔 close(FHD); # 接下來, 感謝一下留言的網友, 三秒後回到顯示留言畫面 print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "Thanks!\n"; print "
\n"; print "謝謝您的留言!\n"; print "
\n"; # 程式結束