#!/usr/local/bin/perl # ↑サーバーの「perl」のパスを指定。 # 駄目なら「#!/usr/local/bin/perl5」 # それでも駄目ならサーバー管理者に問い合わせて下さい。 ########################################################################### ##--------------------- Chama's MEMO CGI v2.02 --------------------------- ## (C)Copyright 2001 by Chama.ne.jp ## E-mail:master@chama.ne.jp ## HP:http://www.chama.ne.jp ########################################################################### #v1.1 データ保存時に一部の不具合があった点を修正 #v2.0 簡易カウンタ機能を追加 #v2.1 更新日表示機能を追加 #---------- 免責事項 -----------------------------------------------------# # 1.このプログラムはフリーソフトですが、著作権はChama-Net事務局中川督之にあります。 #  いかなる場合であっても、有料で売買、設置、使用、変更等を行ってはいけません。 #  また、この著作権表示、CGIを画面に表示した時のChama-Netの表示の変更は認めません。 # 2.このプログラムを使用したことによる一切の損害等は保障致しません。  # 3.その他についてはChama-Net事務局にお問い合わせ下さい。 #  連絡先 http://www.chama.ne.jp #  E-mail master@chama.ne.jp #---------- ↓初期設定項目 -----------------------------------------------# #本文情報ファイルの指定 $file = 'data.dat'; #カウンタ、更新日情報ファイルの指定 $cnt_file = 'data2.dat'; #カウンタの表示(する=yes、しない=no) $cnt_ok = 'yes'; #更新日の表示(する=yes、しない=no) $date_ok = 'yes'; #パスワードの指定 $pass = 'discus8'; #このCGIの名前 $cgi = 'memo.cgi'; #タイトルの指定 $title = 'MEMO-cgi'; #文字サイズの指定 $word_size=2; #文字色の指定 $word_color='#FF0000'; #壁紙の指定(URLを’’間に入れる 例:http://・・・・○○.gif) $bg_file = ''; #壁紙が無ければ背景色を使用 $bg_color = '#FFCC99'; #---------- ↓プログラム--------------------------------------------------# require './jcode.pl'; &decode; #ファイルロック &o_lock; &f_open; &c_open; &c_write; if($in_flag == 2){ ✓ &write; &kanryou; } #ロック解除 &c_lock; if($in_flag == 1){ ✓ &form; } &prev; #-----サブルーチン-----------------------------------------------------# #デコード処理----------------------------------------------- sub decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buff, $ENV{'CONTENT_LENGTH'}); } else { $buff = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buff); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/[\r\t\f]//g; $in{$name} = $value; } $in_pass = $in{'in_pass'}; $in_text = $in{'in_text'}; $in_flag = $in{'in_flag'}; } #パスワードチェック--------------------------------------- sub check{ unless($in_pass){ $err=1; &err; } unless($in_pass eq $pass){ $err = 2; &err; } } #データ保存----------------------------------------------- sub write{ open FOUT, ">$file" or die "$file オープン失敗"; print FOUT $in_text; close FOUT; } #fileの読込み--------------------------------------------- sub f_open{ open FIN, "$file" or die "$file オープン失敗"; @f_data = (); while (){ chomp $_; @f_data = (@f_data,$_); } close FIN; } #カウンタ、更新日情報ファイルを開く------------------------- sub c_open{ open CNTIN,"$cnt_file" or die "$cnt_file オープン失敗"; while (){ chomp $_; ($cnt,$date) = split(/<>/,$_); } #カウントファイルを閉じる close CNTIN; } #カウンタ情報の更新---------------------------------------- sub c_write{ $time = time; $now = &time($time); open CNTOUT, ">$cnt_file" or die "Cannot open $cnt_file:s!"; unless($in_flag > 0){ $cnt++; print CNTOUT $cnt,"<>",$date,"\n"; }else{ print CNTOUT $cnt,"<>",$now,"\n"; } close CNTOUT; } #現在時刻の把握--------------------------------------------- sub time{ $time = $_[0]; ($sec,$min,$hou,$mda,$mon,$yea,$wda,$yda,$isd) = localtime($time); $year_now = $yea + 1900; $date_now = sprintf("%02d/%02d/%02d",$yea + 1900,$mon + 1,$mda); $youbi_now = ('(日)','(月)','(火)','(水)','(木)','(金)','(土)') [$wda]; $time_now = sprintf("%02d:%02d:%02d",$hou,$min,$sec); $now = ''; $now .= $date_now; # $now .= $youbi_now; # $now .= $time_now; return($now); } #完了画面の表示-------------------------------------------- sub kanryou{ ⊤ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "入力完了"; print "\n"; print "
\n"; print "

\n"; print "プレビュー\n"; &last; } #入力画面の表示------------------------------------------- sub form{ ⊤ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "入力画面"; print "\n"; print "
\n"; print "

\n"; print "
\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; &last; } #プレビュー画面の表示-------------------------------------- sub prev{ ⊤ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; foreach $p_file(@f_data){ $p_file =~ s/[\n]/
/g; print "
\n"; print $p_file; } print "
\n"; print "
\n"; print "MEMO.cgi v2.02 by Chama-Net\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "
\n"; &last; } #エラー画面の表示-------------------------------------------- sub err{ #ロック解除 &c_lock; ⊤ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "入力エラーです。"; print "\n"; print "
\n"; print "

\n"; if($err == 1){ print "パスワードが入力されていません。"; }elsif($err == 2){ print "パスワードに誤りがあります。"; } &last; } #HTMLprintサブルーチン--------------------------------------- sub top{ print "Content-type:text/html\n\n"; print "$title\n"; print "\n"; print "\n"; if($bg_file){ print "\n"; }else{ print "\n"; } print "\n"; if($date_ok eq 'yes'){ print "最終更新:",$date,"\n"; } if($cnt_ok eq 'yes'){ print "Count:",$cnt,"\n"; } print "
\n"; print "
\n"; } sub last{ print "\n"; print "
"; print "\n"; exit; } #データロック------------------------------------------------ sub o_lock{ open(LOCK,">data.lock"); flock(LOCK,2); } #ロック解除-------------------------------------------------- sub c_lock{ close(LOCK); }