#!/usr/local/bin/perl #↑使用するサーバのperlのパスに変えてください。大抵はこれか、#!/usr/bin/perl、のどちらかです。 require './jcode.pl'; #アイモード用検索機能付スケージュールCGI Ver2.5 #"i-schedule" 作者:Y,K #∋oノハヽo∈ # ( ´D`)<こんなところが便利! #・タレントさんの雑誌、TVなどの出演予定を教えあうのに大変便利。 #・投稿者が投稿時にパスを設定することにより、投稿者自身でその記事を削除出来る。もちろん管理者用パスで全てを削除可能。うーん便利。 #・投稿をパスによって規制することも可能。かなり便利。 #・現在時刻を表示し、その月の記事を自動で表示する。便利すぎ。etc... #この度はダウンロードして頂き、まことにありがとうございます。今後とも私の作品にご期待下さい。 #このスクリプトはフリーですが、著作権表示は絶対に消さないようお願いします。 #拡張子の変更(i-schedule.txt→i-schedule.cgi)及び、初期設定及び、jcode.plのDL、及びtxtファイルの作成 #(i-schedule.txt(メモ帳などで白紙のまま保存)、is-count.txt(メモ帳などで0(開始番号)と書いて保存))を行った後 #CGIが稼動出来るディレクトリ(777)にi-schedule.cgi(755)jcode.pl(755)i-schedule.txt(666)is-count.txt(666)を一緒に設置してください。 #注:()内はパーミッション、 #バグ報告を歓迎します。どうぞご協力お願いします。 #サーバによっては動かないところもあるようです。その場合はご了承下さい。(niftyサーバで動作確認済) #このスクリプトを使用することによって生じたいかなる損害・事件について、作者は一切引責・補償をいたしません。 #---------------------------------------------------------初期設定----------------------------------------------------------- $title = 'i-schedule'; #タイトル $titlecolor = '#006666'; #タイトルの色 $scriptname = 'i-schedule.cgi'; #このスクリプトの名前(特に変更の必要無し) $pageview = 10; #1ページにおける表示数 $datafile = 'i-schedule.txt'; #記事用ログファイル名(特に変更の必要無し) $datafile2 = 'is-count.txt'; #カウント用ログファイル名(特に変更の必要無し) $text = 'black'; #テキストの色 $bgcolor = '#FFFFCC'; #壁紙の色 $link = '#006666'; #未訪問のリンクの色 $vlink = '#336633'; #訪問済のリンクの色 $shinrai = 0; #信頼性機能を使うか?(YES 1/NO 0) $max = 100; #ログの最大保持数 $maxlength = 1050; #訪問者の書き込みするデータ量を何バイトまで許すか? $homepage = ''; #戻り先URL $noname = ''; #投稿者名が無記入だった場合の名前 $br = 9; #何回まで改行を許すか? $timelag = 9; #世界標準時刻からのタイムラグ(特に変更の必要無し) $form_html = ''; #投稿フォームに表示させる文章(注意書きなど) $dpassword = 'itsgood'; #管理人用PASSです。これによって全ての記事が削除出来ます。 #わかりにくい文字列にしてください。(半角英数8文字まで) $YEARS[0] = '2004'; #以下は投稿フォームのプルダウンに表示される西暦です。 $YEARS[1] = '2005'; #今現在の暦に合うように設定してください。 $MONTHS[0] = '2004年06月'; #以下は検索用プルダウンに表示される $MONTHS[1] = '2004年07月'; #項目です。今現在の暦に合うように設定してください。 $MONTHS[2] = '2004年08月'; #なおこの二つは$MONTHS[12] = '2004年01月';というように増やす $MONTHS[3] = '2004年09月'; #事も、また減らす事も可能です。 $MONTHS[4] = '2004年10月'; #なおその際は、"○○年○○月"といった形式は変えないで下さい。 $MONTHS[5] = '2004年11月'; $MONTHS[6] = '2004年12月'; $MONTHS[7] = '2005年01月'; $MONTHS[8] = '2005年02月'; $MONTHS[9] = '2005年03月'; $MONTHS[10] = '2005年04月'; $MONTHS[11] = '2005年05月'; $password = ''; #投稿ボタンをパスワードによって制限したい場合はこちらで #パスワードを設定し、投稿したいときには #「このスクリプトのURL?pw=設定したパスワード」でアクセスして下さい。 #----------------------------------------------------データを取得する-------------------------------------------------------- unless ($ENV{'CONTENT_LENGTH'} >= $maxlength) { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'}); } else { $QUERY_DATA = $ENV{'QUERY_STRING'}; } @PAIRS = split(/&/,$QUERY_DATA); foreach (@PAIRS) { ($key, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/,/,/g; $value =~ s/&/&/g; $value =~ s/"/"/g; $value =~ s//>/g; foreach (1 .. $br) { $value =~ s/\r\n|\r|\n/
/; } $value =~ s/\r\n|\r|\n/ /g; jcode'convert(*value,'sjis'); $DATA{$key} = $value; } } else { &error("記事が制限バイト数$maxlengthを超えています。"); } #-------------------------------------------現在時刻の取得及び検索用に書式の変更--------------------------------------------- $ENV{'TZ'} = "GMT"; ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time + $timelag * 3600); $mon += 1; $year += 1900; @what = ('日','月','火','水','木','金','土'); $jikoku = sprintf("%02d月%02d日", $mon, $mday); $jikoku2 = sprintf("%02d時%02d分", $hour, $min); $time = "
$jikoku($what[$wday])$jikoku2"; $time =~ s/(日)/(日<\/font>)/; $time =~ s/(土)/(土<\/font>)/; $tellme = sprintf("%04d年%02d月", $year, $mon); $i = sprintf("%02d", $mon); $mday = sprintf("%02d", $mday); $lo = substr($mday, -2, 1); $ve = substr($mday, -1, 1); #----------------------------------------------------投稿フォームの作成------------------------------------------------------ if ($DATA{'button'} eq '投稿' && $DATA{'pw'} eq $password) { &header; print "
\n"; print "\n"; print "\n"; print "お名前:

\n"; print "記事の日付:
曜日\n"; if($shinrai){ print "
記事の信憑性:
×\n"; } print "
記事:

\n"; print "パスワード:
\n"; print "
\n"; print "
$form_html\n"; print "
\n"; exit; } #-------------------------------------------------------書き込み処理--------------------------------------------------------- if (open(TEXT, "$datafile")) { @TEXT = ; close (TEXT); } if ($DATA{'action'} eq 'regist' && $DATA{'pw'} eq $password) { $count = @TEXT; if ($count >= $max) { pop(@TEXT); } if ($DATA{'diary'}) { if (!$DATA{'name'}) { $DATA{'name'} = $noname; } if (open(FIN, "$datafile2")) { $count = ; close(FIN); } if ($count < 1) { $count = 1; } else { $count++; } if (open(FOUT, ">$datafile2")) { print FOUT $count; close(FOUT); } $value = "$DATA{'day1'}年$DATA{'day2'}月$DATA{'day3'}$DATA{'day4'}日,($DATA{'day5'}),$DATA{'name'},$DATA{'neta'},$DATA{'diary'},$count,$DATA{'spass'},\n"; unshift(@TEXT, $value); @TEXT = reverse(sort(@TEXT)); if (open(TEXT, ">$datafile")) { print TEXT @TEXT; close(TEXT); } } else { &error("記事がありません。"); } } #-------------------------------------------------------削除処理------------------------------------------------------------- if ($DATA{'button'} eq '削除') { if (!$DATA{'dpw'}) { &error("PASSがありません。"); } if (!$DATA{'no'}) { &error("Noがありません。"); } foreach (@TEXT) { ($date, $youbi, $name, $neta, $diary,$no,$pass) = split(/\,/, $TEXT[$x]); if ($DATA{'no'} eq $no) { if ($DATA{'dpw'} eq $pass || $DATA{'dpw'} eq $dpassword) { splice(@TEXT, $x, 1); if (open(TEXT, ">$datafile")) { print TEXT @TEXT; close(TEXT); } } else { &error("PASSが違います!"); } last; } $x++; } } #-------------------------------------------------------初期画面の作成------------------------------------------------------- &header; print "\n"; print "$title
\n"; print "$time\n"; print "
\n"; print "\n"; print "\n"; if ($DATA{'pw'} eq $password) { print "\n"; print "\n"; } print "\n"; print "
\n"; print "
\n"; if ($DATA{'find'}) { foreach (@TEXT) { if ($_ =~ /^$DATA{'find'}/) { push(@FIND, $_); } } } else { @FIND = @TEXT; } if (!$DATA{'next'}) { $next = 0; } else { $next = $DATA{'next'}; } $end = @FIND - 1; $pageend = $next + ($pageview - 1); if ($pageend >= $end) { $pageend = $end; } foreach ($next .. $pageend) { ($date, $youbi, $name, $neta, $diary,$no,$pass) = split(/\,/, $FIND[$_]); $youbi =~ s/土/土<\/font>/g; $youbi =~ s/日/日<\/font>/g; $diary =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1[URL]<\/a>/g; print "$date$youbi
記者:$name
\n"; if($shinrai){ print "信頼性:$neta
\n"; } print "$diary
No:$no\n"; print "
\n"; } if ($pageend != $end) { print "
\n"; print "\n"; $pageend += 1; print "\n"; print "\n"; print "
\n"; } print "
\n"; print "
\n"; print "

No:"; print " PASS:"; print " \n"; print "\n"; print "

\n"; print "管理者-HomePage\n"; print "
i-schedule Ver2.3 by Y.K\n"; print "\n"; #--------------------------------------------------------サブルーチン--------------------------------------------------------- sub error { &header; print "ERROR!

$_[0]\n"; print "

戻る\n"; print "\n"; exit; } sub header { print "Content-type: text/html\n\n"; print ""; print "\n"; print "$title\n"; print "\n"; print "\n"; }