#!/usr/local/bin/perl # プロバイダーのパス #================# # プログラム情報 # #================# # ----------------------------------------------------------# # # # LITTLE DIARY Ver.1.10 # # Produced by [Genesis] # # # # URL: http://genesis.vis.ne.jp/ # # E-Mail: genesis@mi.vis.ne.jp # # # # 配布開始日 2001/07/01 # # 最終更新日 2001/09/13 # # # # リンクを表示させる場合は # # 以下のタグを表示させたい部分に入れます。 # # # # LITTLE DIARY # # # # ----------------------------------------------------------# # --+--初期設定ここから-------------------------------------+-- # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- # ファイル名の設定(基本的に変更しないでください。) # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- # 日本語変換コードまでのパス require './jcode.pl'; # このスクリプトのファイル名 $script = "./news.cgi"; # ログデータのファイル名 $log = "./data.log"; # ロックファイル $lockf= "./news.loc"; # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+- # 使用するスキンまでのパスを書いてください(相対パス) # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+- $html = "./template/news.html"; # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- # 運営上に必要な設定です。 # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- # マスターキー(管理画面に入るときに必要なパスワードです。) $password = 'surf2006'; # データ受け渡し方法(POST or GET) # POSTで動かない場合はGETにして試してください。 $met = "POST"; # 日時の表示について # 2001/05/01 (Sun) の場合は「1」 # 2001/05/01 の場合は「2」 # 05/01 (Sun) の場合は「3」 # 2001/05/01 (Sun) [00:00] の場合は「4」 # 2001年05月01日 日曜日 の場合は「5」 # 2001年05月01日(日) の場合は「6」 # 2001年05月01日 の場合は「7」 # 05月01日 日曜日  の場合は「8」 # 2001年05月01日 日曜日 [00時00分] の場合は「9」 $DATE ='2'; # 1ページに表示する記事数 $max = '20'; # 最大記事保存件数 $max_l = '40'; # タグを許すか(許可する=0、許可しない=1) $tag = '0'; # ロックするなら1しないなら0 $locks = '1'; # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+- # ここから下はスキンによって変えてください。 # -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+- # 新しいページを読み込むときのリンク(テキスト可、画像可) # 画像を表示させる場合はタグを入れてください。( ex. ) $new = "<<<"; # 古いページを読み込むときのリンク(テキスト可、画像可) # 画像を表示させる場合はタグを入れてください。( ex. ) $old = ">>>"; # --+--初期設定ここまで-------------------------------------+-- # ---------------------------------------- # ここから下は変更しないでください。 # 変更するにはperlの知識が必要になります。 # ---------------------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); 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'); if ($tag) { $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; $value =~ s///g; } $value =~ s/<>/\<\;\>\;/g; $FORM{$name} = $value; } open (IN,"$html") || &error("インターフェイスがありません。"); $skin = join('',); close(IN); ($head_html,$view_html,$foot_html) = split(//,$skin); $title = $FORM{'title'}; $title =~ s/\r\n/
/g; $title =~ s/\r|\n/
/g; $comment = $FORM{'comment'}; $comment =~ s/\r\n/
/g; $comment =~ s/\r|\n/
/g; $no = $FORM{'no'}; $kiji = $FORM{'kiji'}; if($FORM{'mode'} eq "management"){ &management; } if($FORM{'mode'} eq "edit"){ &edit; } if($FORM{'mode'} eq "edit2"){ &edit2; } if($FORM{'mode'} eq "write"){ &write; } if($FORM{'mode'} eq "e_write"){ &e_write; } if($FORM{'mode'} eq "del"){ &del; } ⊤ sub top { open(LOG,"$log") || &error("データが開けません。"); @lines = ; close(LOG); print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; $total=@lines; $page_=int(($total-1)/$max); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @lines - 1; $page_end = $page + ($max - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($no,$title,$comment,$date) = split(/<>/,$lines[$_]); if ($tag) { &auto($comment); } $_ = $view_html; $_ =~ s/NO/$no/g; $_ =~ s/TITLE/$title/g; $_ =~ s/COMMENT/$comment/g; $_ =~ s/DATE/$date/g; print "$_\n"; } $next = $page_end + 1; $back = $page - $max; if ($back >= 0) { $BACK = "$new"; } if ($page_end ne $end_data) { $NEXT = "$old"; } $_ = "$foot_html"; $_ =~ s//$script/i; $_ =~ s//$met/i; $_ =~ s///i; $_ =~ s/BACK/$BACK/i; $_ =~ s/NEXT/$NEXT/i; print "$_\n"; exit; } sub management { if ($FORM{'pass'} eq "") { &error("パスワードを入力してください。"); } if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; print "
\n"; print <<"EOM"; [TOP] [編集・削除]

EOM print <<"EOM";


新規投稿フォーム

Title:
Comment:




EOM &foot; } sub edit { if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } open(LOG,"$log") || &error("データが開けません。"); @lines = ; close(LOG); $total =@lines; print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; print "
\n"; if (-s $log) { $log_size = -s $log; } else{ $log_size = 0; } $total=@lines; $page_=int(($total-1)/15); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @lines - 1; $page_end = $page + (15 - 1); if ($page_end >= $end_data) { $page_end = $end_data; } print <<"EOM"; [TOP] [新規投稿]

ログサイズ/$log_size byte

EOM print "ページ [\n" ; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/15; if($i eq $af){ print "$i/"; } else{ print "$i/"; } $a+=15; } print "]

\n" ; print <<"EOM"; EOM foreach ($page .. $page_end) { ($no,$title,$comment,$date) = split(/<>/,$lines[$_]); print <<"EOM"; EOM } print <<"EOM";
NO TITLE DATE    
$no $title $date 編集 削除


EOM print "ページ [\n" ; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/15; if($i eq $af){ print "$i/"; } else{ print "$i/"; } $a+=15; } print "]\n" ; print "
"; &foot; } sub edit2 { if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } open(LOG,"$log") || &error("データが開けません。"); @lines = ; close(LOG); print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; print "
\n"; print "[戻る]

\n"; @new = (); $flag = 0; foreach $line (@lines) { ($no,$title,$comment,$date) = split(/<>/,$line); if ($kiji eq "$no") { $comment =~ s/
/\n/g; $comment =~ s//>/g; print <<"EOM";


編集フォーム($no)

Date:
Title:
Comment:

       



EOM &foot; } } } sub e_write { if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } $date = $FORM{'date'}; if ($locks eq '1') { &lock; } open(LOG,"$log") || &error("データが開けません。"); @lines = ; close(LOG); @new = (); $flag = 0; if ($date eq "") { &time; } foreach $line (@lines) { ($kno,$ktitle,$kcoment,$kdate) = split(/<>/,$line); if ($no eq "$kno") { $line = "$no<>$title<>$comment<>$date<>\n"; $flag = 1; } push(@new,"$line"); } if ($flag eq 0) { &error("編集記事ナンバーが不正です。"); } if ($flag eq 1) { open (LOG,">$log") || &error("データが開けません。"); print LOG @new; close(LOG); } if (-e $lockf) { unlink($lockf); } &edit; } sub del { if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } if ($FORM{'realy'} eq "") { print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; print "
\n"; print <<"EOM";




$FORM{'del'}番の記事を本当に削除しますか?


YES

NO





EOM &foot; } if ($locks eq '1') { &lock; } open(LOG,"$log") || &error("データが開けません。"); @COMS = ; close(LOG); @RENEW = (); $lag = 0; foreach (@COMS) { ($no,$title,$comment,$date) = split(/<>/,$_); if ($FORM{'del'} eq $no) { $_ = ""; $lag =1; } push (@RENEW,"$_"); } if($lag eq "0"){ &error("該当記事がありません。"); } open (LOG,">$log") || &error("データが開けません。"); print LOG @RENEW; close(LOG); if (-e $lockf) { unlink($lockf); } &edit; } sub write { if ($FORM{'pass'} ne "$password") { &error("パスワードが違います。"); } if ($FORM{'title'} eq "") { &error("タイトルが未記入です。"); } if ($FORM{'comment'} eq "") { &error("コメントが未記入です。"); } &time; if ($locks eq '1') { &lock; } open(LOG,"$log") || &error("データが開けません。"); @lines = ; close(LOG); ($kno,$ktitle,$kcoment,$kdate) = split(/<>/,$lines[0]); if ($comment eq $kcoment && $title eq $ktitle) { &error("二重投稿は禁止です。"); } @new = (); for($i=0;$i<$max_l-1;$i++) { push (@new,$lines[$i]); } $no = $kno + 1; unshift (@new,"$no<>$title<>$comment<>$date<>\n"); open(LOG,">$log") || &error("データが開けません。"); print LOG @new; close(LOG); if (-e $lockf) { unlink($lockf); } } sub foot { print <<"EOM";


- Genesis -

EOM exit; } sub auto { $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1$2<\/a>/g; $_[0] =~ s/([\w\.\-]+)\@([\w\.\-]+)/$1\@$2<\/a>/g; } sub time { $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); $mon++; $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $week_k = ('日','月','火','水','木','金','土') [$wday]; $year += 1900; if ($mday <10) { $mday ="0$mday";} if ($mon <10) { $mon ="0$mon";} if ($hour <10) { $hour ="0$hour";} if ($min <10) { $min ="0$min";} if ($DATE eq '1') { $date = "$year/$mon/$mday ($week)"; } elsif ($DATE eq '2') { $date = "$year/$mon/$mday"; } elsif ($DATE eq '3') { $date = "$mon/$mday ($week)"; } elsif ($DATE eq '4') { $date = "$year/$mon/$mday ($week) [$hour:$min]"; } elsif ($DATE eq '5') { $date = "$year年$mon月$mday日 $week_k曜日"; } elsif ($DATE eq '6') { $date = "$year年$mon月$mday日($week_k)"; } elsif ($DATE eq '7') { $date = "$year年$mon月$mday日"; } elsif ($DATE eq '8') { $date = "$mon月$mday日 $week_k曜日"; } elsif ($DATE eq '9') { $date = "$year年$mon月$mday日 $week_k曜日 [$hour時$min分]"; } else { $date = "$year/$mon/$mday($week)"; } } sub lock { $flag = 0; foreach (1 .. 5) { unless (-e $lockf) { open(LOCK,">$lockf"); close(LOCK); $flag = 1; last; } else { sleep(1); } } if ($flag eq 0) { &error("書き込みの衝突が起きました。"); } } sub error { if (-e $lockf) { unlink($lockf); } print "Content-type: text/html\n\n"; print "\n\n"; print "$head_html\n"; print "
\n"; print <<"EOM";

ERROR!!



$_[0]






BACK





EOM &foot; }