#! /usr/local/bin/perl #-------------------------------- #ゆいりんく1.0(link.cgi) #1997.10.11製作 #すくりぷと ばい ゆいちゃっと #         Since 1996 #-------------------------------------------------- # DN Memo Ver5.4 (日記 or 更新記録スクリプト) #-------------------------------------------------- # 質問などはゆいさんではなくりゅういちのページまで # W W W :http://www.cj-c.com/ # E-MAIL:macchibi@mvf.biglobe.ne.jp #-------------------------------------------------- # 設置方法: # dnmemo.cgi(755)/jcode.pl(755)/dnmemo.dat(666)/dncount.dat(666) # 4つのファイルを同一ディレクトリに設置。 #-------------------------------------------------- require './jcode.pl'; #----初期設定など---------------* $method= 'POST'; # 受け渡しの方法 GET or POST $title = '店長の短い一日'; # タイトル # BODYタグを書きますHTMLファイルのBODYタグと一緒 $body=''; $homepage= '../index.html'; # 戻りのURL $t_font = ''; # タイトルのフォント $t_size = 4; # タイトルのサイズ $color = "#000000"; # タイトルの色(16進数で指定) $table = 0; # モードの変更(1=更新記録 0=日記) $time_t= 1; # 時間のモード(1=手動 0=自動) #-----------------------------------------日記画像の設定------- # 日記モードの場合の天気画像の定義 # $icond は画像の位置を指定。(初めのままだと同じディレクトリ。最後のスラッシュ(/)は省く) # @how1 は画像の名前を定義。(*.gif / *.jpg など) # @how2 は天気の名前の定義。(晴れ / あめ など) #-------------------------------------------------------------- $icond="."; # 天気画像のあるディレクトリ(相対パスか絶対パス(http://〜)) @how1 = ('sun.gif','lain.gif','crow.gif','snow.gif','tand.gif'); @how2 = ('晴れ','あめ','くもり','ゆき','かみなり'); $t_wid= "32"; # 画像の横幅(ピクセル指定 / 指定しない場合は縦横とも空欄) $t_hei= "32"; # 画像の縦幅( 〃 ) $obi_color= "#CCCCFF"; # 記事タイトルのバック色(16進数で指定) $obi_t = "#000000"; # 記事タイトルの文字色 ( 〃 ) $c_bgcolor= "#FDFDFD"; # コメントのバック色 ( 〃 ) $s_color = "#6666FF"; # 記事タイトルの横につく■の色( 〃 ) $mail = 'info@ohanaya.com'; # あなたのE-メールアドレス $your_n= 'Master'; # あなたの名前 $passwd='4325'; # 書きこむパスワードを指定(削除するときもこれ。) $max = 20; # 最大記述数 $p_max = 10; # 1ページ表示件数 $tmax = 30; # タイトルの限度(全角だとこの場合15字) $cmax = 2000; # コメントの限度(全角だとこの場合1000字) $crap = "SOFT"; # フォーム改行形式(SOFT or HARD) #上部のHTML部分を書きます(タグも書けます) $coms = <<"_TOP_"; □ 仕事とは関係ない事ばかりです
_TOP_ #↑ここは消さないこと #-----ここから下は応用設定------* $t_img = ""; # タイトルに画像をURLで指定 $twid = "135"; #  〃 の横幅(ピクセル指定) $thei = "80"; #  〃 の縦幅( 〃 ) $a_link= 1; # URL、E-mailをリンクする? (1=YES 0=NO) $tagkey = 0; # タグの使用 (1=YES 0=NO) $link_file= './dnmemo.dat'; # datファイルの位置 $cgidir = './dnmemo.cgi'; # CGIファイルの名前 #--カウンタ設定(KENTさん式)--# $counter = 1; # カウンタの設置 (1=YES 0=NO) $mini_fig = 5; # カウンタの桁数 $cnt_color= "000000"; # テキスト=> テキスト色 $gif_path = "."; # 画像=> 画像までのディレクトリ $mini_wid = 5; # 〃 => 画像の横サイズ $mini_hei = 12; # 〃 => 画像の縦サイズ $countfile= './dncount.dat'; # カウンタファイル $k_font="MS Pゴシック"; # 基本フォント(環境による) $k_size="11pt"; # 基本フォントサイズ(ptは単位 削除不可) $ie_c = "#E88C8E"; # リンクを合わせた時の色変化(16進数 IE向け) #------設定はここまで-----------* #----------------------------------- # ここより下はあなたの責任で…。 #----------------------------------- $regist = '1'; $ver="DN Memo v5.4"; &jikan;&decode; if ($mode eq "hen_") { &hen_; } if ($mode eq "h_w_") { &h_w_; } &readlog; if ($mode eq "find") { &find; } if ($mode eq "edit") { &edit; } &write if ($name); &html; exit; sub hed_ { #ヘッダ print "Content-type: text/html\n\n"; print <<"_HTML_"; $title $body _HTML_ } sub foot_ { #フッタ print <<"_HTML_";
_HTML_ exit; } sub html { $count = int(($roomtotal-1)/$lmax); if ($t_img ne ""){$title_h="\n";} elsif($t_img eq ""){ $title_h="$title\n"; } &hed_; print <<"_HTML_";
$title_h
>> BACK

$coms

_HTML_ $roomtotal = @lines; $count = int(($roomtotal-1)/$lmax); for($i=0;$i<=$count;$i++){ if($i eq $page){ print " \n"; }else{ print "[$i]\n"; } }#for (@lines < $lmax) || (@lines = @lines[$page2 .. $page2+$lmax-1]); if($table){ print "
\n"; foreach $line(@lines){ ($url,$time_on,$name,$len) = split(/\t/, $line); if($name ne "" && $len ne ""){ if ($url eq "http://" || $url eq "") { $url = "\n"; } elsif ($url ne "") { $url = "$url"; } if ($a_link == 1) { &auto_($len); } print "
$name
\n" ; print "
$time_on

$len
\n" ; print "
$url
\n" ; print "
\n"; }} }else{ foreach $line(@lines){ ($url,$time_on,$name,$len) = split(/\t/, $line); if($name ne "" && $len ne ""){ if($t_wid ne ""){$howhow="";} elsif($t_wid eq ""){$howhow="";} if ($a_link == 1) { &auto_($len); } print "
$name
\n" ; print "
□ $time_on$howhow\n" ; print "

$len
\n"; print "
\n"; }} }#table for($i=0;$i<=$count;$i++){ if($i eq $page){ print " "; }else{ print "[$i] \n"; } }#for print <<"_HTML_";

_HTML_ if ($counter) { &counter; } &foot_; }#html END sub write { &err(1) unless($name); &err(2) unless($len); &err(4) if( $regist && ($pass ne $passwd) ); &err(5) if(length($len) > $cmax); $value = "$url\t$time_on\t$name\t$len\t$times\t\n"; &writelog; }#write END sub decode{ #一般的なデコード&変数への代入 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 ($tagkey == 0) { $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; } else { $value =~ s/<>/\<\;\>\;/g; $value =~ s///g; } $FORM{$name} = $value; } $pass = $FORM{'pass'}; $name = $FORM{'name'}; $url = $FORM{'url'}; if($time_t == 1){$time_on = $FORM{'date'};} elsif($time_t == 0){$time_on = $date;} $len = $FORM{'len'}; $len =~ s/\r\n/
/g; $len =~ s/\r|\n/
/g; $mode = $FORM{'mode'}; $page = $FORM{'page'}; $page=0 unless($page); $lmax = $FORM{'lm'}; $lmax = $p_max unless($lmax); $page2 = $page*$lmax; $tms = $FORM{'tms'} }#decode END #------------- # フォーム表示 #------------- sub find { &err(4) if( $regist && ($pass ne $passwd) ); $passon="" if($regist); if($table == 1){ $url_form = "更新ページURL:
入力しない場合はこのまま"; $t_m = "タイトル"; }elsif($table == 0){ $t_m2 = "見だし"; } if ($t_img ne ""){$title_h="\n";} elsif($t_img eq ""){ $title_h="$title\n"; } &hed_; print <<"_HTML_"; □ BACK □ EDIT
$title_h
(Write Mode)□ 内容編集はEDITモードで
$passon$url_form _HTML_ if($table==0){ print "\n"; } if($time_t==1){ print""; } print <<"_HTML_";
$t_m$t_m2/
コメント/
てんき/ (天気を選択して下さい)
時刻調整/

_HTML_ &foot_; } sub jikan{#$dateに時刻を代入します。 $times = time; $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); $year=$year+1900; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year\/$mon\/$mday\($week\) $hour\:$min\:$sec"; }#jikan END sub readlog{ #配列@linesにログを読み込む open(DB,"$link_file")||&err(0); seek(DB,0,0); @lines = ; close(DB); }#readlog END sub writelog{ #$valueを@linesに加えたのち、書き込む (@lines < $max-1) || (@lines = @lines[0 .. $max - 2]); unshift( @lines,$value) if ($value); @lines=grep(!/^\n/,@lines); open(DB,">$link_file") || &err(0); eval 'flock(DB,2);'; seek(DB,0,0); print DB @lines; eval 'flock(DB,8);'; close(DB); }#writelog END sub edit { if($buffer=~/erase/){ &err(4) if($pass ne $passwd); $buffer=~s/&pass=.*//;#余分な部分を削除 $buffer=~s/&//;#余分な部分を削除 (@erase) = split(/erase=/, $buffer);#削除リストを作成 foreach $erase(@erase){ @lines=grep(!/$erase/,@lines); } $value='';&writelog; } if ($t_img ne ""){$title_h="\n";} elsif($t_img eq ""){ $title_h="$title\n"; } &hed_; print <<"_HTML_";
EDIT終了  □ WRITE
$title_h
(Edit Mode)
□ 削除するものにチェックをいれます。
□ 編集する場合は、タイトルをクリック。
Page: _HTML_ $roomtotal = @lines; $count = int(($roomtotal-1)/$lmax); for($i=0;$i<=$count;$i++){ if($i eq $page){ print "[$i] \n"; }else{ print "[$i] \n"; } }#for (@lines < $lmax) || (@lines = @lines[$page2 .. $page2+$lmax-1]); print "
\n"; print "\n" ; foreach $line(@lines){ ($url,$time_on,$name,$len,$tm) = split(/\t/, $line); print "\n"; } print "
タイトル&日付けコメント
$name\n" ; print "
$time_on
$len
\n"; print <<"_HTML_";
$date現在、$roomtotal件登録されています。

_HTML_ &foot_; }#html END #--------------- # 記事編集ページ #--------------- sub hen_ { &err(4) if( $regist && ($pass ne $passwd) ); open(DB,"$link_file"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { ($url,$time_on,$name,$len,$tm) = split(/\t/,$line); if ($tms eq "$tm") { &hed_; $len =~ s/
/\n/g; if ($tagkey) { $len =~ s//>/g; } print <<"_HTML_";
タイトル [$name] の編集
□ 編集したい項目を変更し[編集]ボタンを押してください。
_HTML_ if($table==0){ print "\n"; }elsif($table==1){ print "\n"; } print <<"_HTML_";
タイトル /
時刻調整 /
コメント/ (適当に改行を入れて下さい)
てんき/ (天気を選択して下さい)
更新ページURL/
入力しない場合はこのまま
_HTML_ &foot_; } } } #--------------------- # 編集内容を書きかえる #--------------------- sub h_w_ { &err(1) unless($name); &err(2) unless($len); &err(5) if(length($len) > $cmax); open(DB,"$link_file"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { $line =~ s/\n//g; ($kurl,$kti,$kna,$klen,$ktm) = split(/\t/,$line); if ($tms eq "$ktm") { $line = "$url\t$FORM{'tmtm'}\t$name\t$len\t$tms\t"; $flag = 1; } push(@new,"$line\n"); } if ($flag == 0) { &er_("編集ナンバーが不正です。"); } if ($flag == 1) { open (DB,">$link_file"); print DB @new; close(DB); } &html; } ### --- カウンタ処理 ---(KENTさんのスクリプトを参考 http://www.kent-web.com)### sub counter { # カウントファイル読み込み open(NO,"$countfile") || &error("Can't open $countfile",'0'); $cnt = ; close(NO); # カウントアップ if ($FORM{'mode'} eq "") { $cnt++; # カウントファイル更新 open(NO,">$countfile") || &error("Can't write $countfile",'0'); print NO $cnt; close(NO); } # 桁数調整 while(length($cnt) < $mini_fig){ $cnt = 0 . $cnt; } @cnts = split(//,$cnt); print "
\n"; # カウンタ表示 if (-e "$gif_path/0.gif") { foreach (0 .. $#cnts) { print "\"$cnts[$_]\""; } } else { print "$cnt"; } print "
\n"; } sub auto_ { # URL、E-MAILを判断してリンクにする $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1$2<\/a>/g; $_[0] =~ s/([\w\.\-]+)\@([\w\.\-]+)/$1\@$2<\/a>/g; } sub err{ $error = $_[0]; &hed_; print <<"_HTML_"; $title$body

タイプ $error のエラーが発生しました。


[
戻る]
エラータイプの説明

タイプ0:ログファイルが開けないか書け込めません
タイプ1:タイトルが記入されていません
タイプ2:コメントがありません
タイプ3:URLが不適当です
タイプ4:パスワードが不適当です
タイプ5:コメントが多すぎます
_HTML_ &foot_; } __END__