#!/usr/bin/perl require "jcode.pl"; $var = "Version 0.13"; # //// 基本設定 /////////////////////////////////////////////////////////////////////////// # スクリプト名 $script = "diary.cgi"; # タイトル名 $title = "バッグのTIA MARIA - ティアマリア 「TM通信」"; # 戻り先 (例) ../index.html $backurl = "http://www.tiamaria-tokyo.com"; # Symlinkによるファイルのロック (Yes:1,No:0) 1を推奨 $lockon = 0; $lockfile = "lock.lok"; # ログファイル名 $logfile = "diary.log"; # 最近の絵TM通信の最大記事件数 $maxkiji = 5; # 管理者パスワード $adpwd = "tiamaria606"; # 添付ファイルの格納場所 $icon_dir = "../up/"; # 添付ファイル(許可する拡張子:全て半角小文字で登録) @iconft = ('jpg','gif','jpeg','',''); # 絵のサイズ $i_width = 200; # 横 # 画像以外の添付ファイルに対してのアイコン $tmp_img = "../up/mem10.gif"; # フォーム投稿時の最大サイズ (単位:KB) $upsize = 100; # 過去ログディレクトリ $oldbox = "./oldlog/"; # HTMLTAGの許可 (Yes:1,No:0) $tagok = 1; # HPの上部にロゴ等を埋め込めます(必要に応じてお使いください) $head_title = <
HTML_END # //// 基本設定 (ここまで) //////////////////////////////////////////////////////////////// # 特殊サーバー設置の拡張設定(通常は使用しません。Hi-Ho等のサーバー用です。) # アイコンフォルダの絶対パス($tmp_imgも絶対パスにする必要があります。) $icon_url = ""; # ------ 拡張設定 -------- # フレームを使用する (Yes:1,No:0) サーバー負荷軽減のため、0を推奨 $frameok = 0; # 日付の位置 (右:1,左:0) $dayloca = 1; # 画像無しの時に位置を固定する (Yes:1,No:0) $imgloca = 0; # TM通信の詰め方? (右詰め:1,左詰め:0) <言葉が変です。(笑) $nikkiloca = 1; # 編集削除時に関連記事を表示する (Yes:1,No:0) $ndkiji = 1; # 過去ログファイルのパーミッションを666に自動で設定 (Yes:1,No:0) $chauto = 0; # ------------------------ # ----- フォントとテーブルサイズの設定 ---------------------------------- # 基本フォント $basefont = ''; # 基本フォントサイズ $basefontsize = '9pt'; # テーブル幅 (単位はピクセル) $tbwid = '600'; # テーブル(名前部分:左上の幅) (単位はピクセル) $tbrwid = '100'; # ----------------------------------------------------------------------- # ------------------------ # 補足 # menu01 : 日付情報格納 # menu02 : TM通信のタイトル # menu03 : # menu04 : # menu05 : # ------------------------ # -- 色彩のコーディネート (ここから) ------------------ # ===== BODY設定 =========== # 壁紙 (無しの場合は指定なし) $kabegami = ""; # 背景色 & ヘルプのバックグラウンド $color01 = "#ffffff"; # テキストの色 $color02 = "#666666"; # 未リンクの色 $color03 = "#666666"; # 既リンクの色 $color04 = "#666666"; # ===== スタイルシート ===== # リンクを合わせた時の色 (hover) $color05 = ""; # フォームのボックス内のフォントの色 (st1) $color06 = ""; # フォームのボックス内の背景の色 (st1) $color07 = "#ffffff"; # ===== TABLEの色(投稿時) == # テーブルの色(コンテンツ記入部) … 未記入で背景色 … $color08 = "#C8E4B1"; # テーブル内のフォントの色(コンテンツ記入部) $color09 = "#666666"; # テーブルの色(入力部) … 未記入で背景色 … $color10 = "#F6F8EA"; # 省略可の文字の色 $color11 = "#cc0000"; # ===== TABLEの色(通常記事) == # テーブルの色(名前) … 未記入で背景色 … $color12 = "#ffffff"; # テーブル内のフォントの色(名前) $color13 = "#339999"; # テーブルの色(タイトル) … 未記入で背景色 … $color14 = "#339999"; # テーブル内のフォントの色(タイトル) $color15 = "#666666"; # テーブルの色(記事部分) … 未記入で背景色 … $color16 = "#F6F8EA"; # テーブル内のフォントの色(日付等) $color17 = "#666666"; # テーブル内のフォントの色(記事) $color18 = "#666666"; # ===== TABLEの色(TM通信記事) = # テーブルの色(名前) … 未記入で背景色 … $color19 = "red"; # テーブル内のフォントの色(名前) $color20 = "#ffffff"; # テーブルの色(タイトル) … 未記入で背景色 … $color21 = ""; # テーブル内のフォントの色(タイトル) $color22 = ""; # テーブルの色(記事部分) … 未記入で背景色 … $color23 = "#F6F8EA"; # テーブル内のフォントの色(日付等) $color24 = ""; # テーブル内のフォントの色(記事) $color25 = ""; # -- 色彩のコーディネート (ここまで) ------------------ # テーブル背景色の設定 if($color01 ne ''){$back01 = "bgcolor=$color01";} if($color08 ne ''){$back08 = "bgcolor=$color08"; $stylest1 = "background-color:$color08;border:1 dotted $color08;";} if($color10 ne ''){$back10 = "bgcolor=$color10";} if($color12 ne ''){$back12 = "bgcolor=$color12";} if($color14 ne ''){$back14 = "bgcolor=$color14";} if($color16 ne ''){$back16 = "bgcolor=$color16";} if($color19 ne ''){$back19 = "bgcolor=$color19";} if($color21 ne ''){$back21 = "bgcolor=$color21";} if($color23 ne ''){$back23 = "bgcolor=$color23";} # //// FORMからDATAを読み込む -とほほさんのスクリプトを一部改造- /////////////////////////// if($ENV{'REQUEST_METHOD'} eq "POST"){ $buffer = 'POSTDATA'; # POSTの場合 # 標準入力からデータを読みだす $buf = ""; $read_data = ""; $remain = $ENV{'CONTENT_LENGTH'}; # UPサイズのチェック if(&checksize($remain)){&header;&error("フォーム投稿時の最大サイズは、$upsize\KB以内です。");} binmode(STDIN); while ($remain) { $remain -= sysread(STDIN, $buf, $remain); $read_data .= $buf; } # データを解釈する $pos1 = 0; # ヘッダ部の先頭 $pos2 = 0; # ボディ部の先頭 $pos3 = 0; # ボディ部の終端 $delimiter = ""; $max_count = 0; while (1) { # ヘッダ処理 $pos2 = index($read_data,"\r\n\r\n",$pos1)+4; @headers = split("\r\n",substr($read_data,$pos1,$pos2-$pos1)); $filename=""; $name=""; $flag=0; foreach(@headers){ if ($delimiter eq "") {$delimiter = $_; }elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"; filename="([^;]*)"/i) { $name = $2; if ($3) { # 拡張子の取り出し @filefooter = split(/\./,$3); # 拡張子を全て小文字に変換 @filefooter[1] =~ tr/A-Z/a-z/; # 拡張子の判定 if(&ftflag(@filefooter[1])){&header;&error("許可されていない拡張子です。");} $filename = $name."\.".@filefooter[1]; } }elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"/i){$name = $2;} } # ボディ処理 $pos3 = index($read_data, "\r\n$delimiter", $pos2); $size = $pos3 - $pos2; if($filename){ # 以前のファイルの削除 &filedel($name); if (open(OUT, "> $icon_dir$filename")) { binmode(OUT); print OUT substr($read_data, $pos2, $size); close(OUT); } $FORM{$name} = $filename; }elsif($name){ $FORM{$name} = substr($read_data,$pos2,$size); if(!$tagok){ # タグ不可 $FORM{$name} =~ s//>\;/g; } # TABを全てSpaceに置き換える $FORM{$name} =~ s/\t/ /g; # 改行コードは全て
に置き換える $FORM{$name} =~ s/\r\n/
/g; $FORM{$name} =~ s/\r|\n/
/g; } # 終了処理 $pos1 = $pos3 + length("\r\n$delimiter"); if(substr($read_data, $pos1, 4) eq "--\r\n") { # すべてのファイルの終端 last; }else{ # 次のファイルを読み出す $pos1 += 2; next; } } }else{ # GETの場合 $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); @spall =(); 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(!$tagok){ # タグ不可 $value =~ s//>\;/g; } # TABを全てSpaceに置き換える $value =~ s/\t/ /g; # 改行コードは全て
に置き換える $value =~ s/\r\n/
/g; $value =~ s/\r|\n/
/g; $FORM{$name} = $value; } } # ==== メインルーチン ===================================================================== # 日時の取得 &gettime; # 管理人の権限の取得(クッキーを発行) if($FORM{'mode'} eq 'pwd'){&ninsyou;} # 認証コードを発行する if($FORM{'mode'} eq 'writecode'){&writecode;} if($frameok){ # Frame if(!$buffer){&t_frame;} # Frame左側 if($FORM{'loca'} eq 'f_left'){&f_left;} # Frame右側 if($FORM{'loca'} eq 'f_right'){&f_right;} }else{&f_right;} # ========================================================================================= # //// フレーム /////////////////////////////////////////////////////////////////////////// sub t_frame{ print "Content-type: text/html\n"; print "\n"; print< $title <body> フレーム非対応のブラウザの方は利用できません </body> HTML_END exit; } # //// ヘッダー /////////////////////////////////////////////////////////////////////////// sub header{ print "Content-type: text/html\n"; print "\n"; print< $title
バッグのTIA MARIA - ティアマリア 「TM通信」
TM通信
ティアマリアの新商品情報、ファッション情報はもちろん、
ティアマリアのテイストで選んだオススメのライフスタイル情報をお届けします。
HTML_END } # //// フッター /////////////////////////////////////////////////////////////////////////// sub footer{ print<
Copyright(C) 2003 TIA MARIA All Rights Reserved.
HTML_END exit; } # //// Form幅の調整 /////////////////////////////////////////////////////////////////////// sub getform{ if(&ieflag){ # IE4,IE5用の設定 $w_name = 20; $w_mail = 50; $w_title = 80; $w_com = 70; $w_url = 75; $w_file = 66; $w_key = 15; }else{ # IE4,IE5以外の設定 $w_name = 13; $w_mail = 33; $w_title = 52; $w_com = 57; $w_url = 50; $w_file = 44; $w_key = 12; } } # //// 投稿フォーム /////////////////////////////////////////////////////////////////////// sub tform{ if($c_key ne $adpwd){&error("あなたは管理者ではありません。");} if($FORM{'date'} eq ''){ $r_date = $date; }else{ # 編集及び記事削除時にログファイルから関連ログ検出 # 投稿記事のログを開く open(IN,"$logfile") || &error("Can't open logfile"); @lines = ; close(IN); # 初期化 $r_date = ""; $r_title = ""; $r_com = ""; foreach$line(@lines){ ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,$line); if($rdate eq $FORM{'date'}){ $r_date = $rdate; $c_name = $rname; $r_title = $rtitle; $c_mail = $remail; # コメントは
を改行コードに置き換える $rcom =~ s/
/\n/g; $r_com = $rcom; $c_url = $rurl; last; } } } # Form幅の調整 &getform; print"
\n"; if($frameok){print"\n";} print"\n"; print"\n"; print"\n"; print"\n"; # 日付 if($rmenu01 eq ''){$rmenu01 = $r_date;} # 年(フォーマット) $nnen = substr($rmenu01,0,4); # 月(フォーマット) $ntuki = substr($rmenu01,4,2); # 日(フォーマット) $nhi = substr($rmenu01,6,2); print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # タイトル print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # 添付ファイル print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # TM通信 print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # 送信 if($FORM{'date'} ne ''){ # PASSWORD print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"
日付\n"; # 年 print"年\n"; # 月 $t = 1; print"月\n"; # 日 $t = 1; print"日\n"; print"
タイトル 省略可
添付ファイル 省略可
内容
編集/削除
\n"; }else{ print"\n"; print"\n"; print"\n"; print"\n"; print" \n"; print"\n"; if(&ieflag){ print"\n"; print" \n"; print"\n"; } print"\n"; } print"
\n"; # ヘルプを表示 &help; } # //// ロックファイル : symlink関数 /////////////////////////////////////////////////////// sub lock{ local($retry) = 5; while (!symlink(".",$_[0])) { if (--$retry <= 0) { &error("LOCK is BUSY",$_[0]); } sleep(1); } } # //// Error処理 /////////////////////////////////////////////////////////////////////////// sub error { if(-e $_[1]){ unlink($_[1]);} print"

エラー

\n"; print"

$_[0]

\n"; print"



ブラウザの戻るで戻ってください。
\n"; &footer; exit; } # //// UP投稿部 ログへの書き込み ////////////////////////////////////////////////////////// sub writelog{ if($FORM{'key'} ne $adpwd){&header;&error("あなたは管理者ではありません。");} # 記入漏れのチェック $error_flag = 0; if($FORM{'mode2'} ne 'del' && $FORM{'com'} eq ''){$error_flag = 1;} if($error_flag){ # 編集時にはエラーが生じても添付ファイルを削除しない if($FORM{'mode'} ne 'hensyu'){&filedel($FORM{'date'});} &header;&error("記入漏れがあります。"); } # 日付情報を8桁にする $FORM{'menu01'} = $FORM{'menu01_1'}.$FORM{'menu01_2'}.$FORM{'menu01_3'}; # ファイルのロック if($lockon){&lock($lockfile);} # 投稿記事のログを開く open(IN,"$logfile") || &error("Can't open logfile",$lockfile); @lines = ; close(IN); # 初期化 @new = (); if($FORM{'mode2'} eq 'hensyu'){ # 記事編集時 foreach$line(@lines){ ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,$line); if($rdate eq $FORM{'date'}){ $line = "$rdate\t$FORM{'name'}\t$FORM{'email'}\t$FORM{'title'}\t$FORM{'com'}\t$FORM{'url'}\t$FORM{'key'}\t$FORM{'menu01'}\t$FORM{'menu02'}\t$FORM{'menu03'}\t$FORM{'menu04'}\t$FORM{'menu05'}\t\n"; } push(@new,$line); } }elsif($FORM{'mode2'} eq 'del'){ # 記事削除時 foreach$line(@lines){ # 記事削除用フラッグ $dflag = 1; ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,$line); if($rdate eq $FORM{'date'}){ # 添付ファイルの削除 &filedel($FORM{'date'}); $dflag = 0; } if($dflag){push(@new,$line);} } }else{ # 新規投稿時 $line = "$FORM{'date'}\t$FORM{'name'}\t$FORM{'email'}\t$FORM{'title'}\t$FORM{'com'}\t$FORM{'url'}\t$FORM{'key'}\t$FORM{'menu01'}\t$FORM{'menu02'}\t$FORM{'menu03'}\t$FORM{'menu04'}\t$FORM{'menu05'}\t\n"; unshift(@lines,$line); # 記事をカウントしMAXを超えたら古い記事から削除 $s = 0; while($s<@lines){ if($s < $maxkiji){ push(@new,@lines[$s]); }else{ ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,@lines[$s]); if($rmenu01 eq ''){$rmenu01 = $rdate;} $oldlog = substr($rmenu01,0,6)."\.log"; &movelog($rdate,$logfile,$oldlog); } $s++; } } # ログの更新 open(OUT,">$logfile") || &error("Can't write logfile",$lockfile); print OUT @new; close(OUT); # ロック解除 if(-e $lockfile){unlink($lockfile);} # ブラウザのリフレッシュ &header; if($frameok){ print"\n"; }else{ print"\n"; } &footer; exit; } # //// クッキーの発行 ////////////////////////////////////////////////////////////////////// sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $yearg += 1900; if($secg < 10){$secg = "0$secg";} if($ming < 10){$ming = "0$ming";} if($hourg < 10){$hourg = "0$hourg";} if($mdayg < 10){$mdayg = "0$mdayg";} $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT"; $cook="key\:$FORM{'key'}"; print "Set-Cookie: tboard=$cook; expires=$date_gmt\n"; } # //// クッキーの取得 ///////////////////////////////////////////////////////////////////// sub get_cookie{ $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'tboard'}); foreach $pair (@pairs) { $cnum = index("$pair","\:"); $name = substr($pair,0,$cnum); $value = substr($pair,($cnum+1),(length($pair)-($cnum+1))); $COOKIE{$name} = $value; } $c_key = $COOKIE{'key'}; } # //// 記事表示部 ///////////////////////////////////////////////////////////////////////// sub kiji{ # 過去ログ時に必要 if($logfile eq ''){&footer;} if(!$searchflag){ # 投稿記事のログを開く open(IN,"$logfile") || &error("Can't open logfile"); @lines = ; close(IN); } $s = 0; while($s<@lines){ ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,@lines[$s]); if($FORM{'mode'} eq 'tform' && $FORM{'date'} ne $rdate){$s++;next;} # 親記事 $ncolor = $back12; $nfont = $color13; $tcolor = $back14; $tfont = $color15; $kcolor = $back16; $kfont1 = $color17; $kfont2 = $color18; # === テンプレート ======================= # テーブルサイズ $osize0 = $tbwid; $osize1 = $osize0 - 4; $osize2 = $tbrwid; $osize3 = $osize0 - $osize2; $rsize0 = $osize0 - 50; $rsize1 = $rsize0 - 4; $rsize2 = $tbrwid; $rsize3 = $rsize0 - $rsize2; # ======================================== # 記事の内容 # 投稿日 $day = substr($rmenu01,4,2).'/'.substr($rmenu01,6,2).'/'.substr($rmenu01,0,4); # 記事の内容 if(!$oldflag && $c_key eq $adpwd){ # 記事編集用 if($frameok){ $khen = "   編集/削除"; }else{ $khen = "   編集/削除"; } }else{$khen = "";} if($s){ if($fflag){print" \n";} print" \n"; print"\n"; print"\n"; print"\n"; } print"
\n"; # print"\n"; print"
\n"; print"\n"; if($rmenu02 eq ''){$rmenu02 = ' ';} if($dayloca){ print"\n"; print"\n"; }else{ print"\n"; print"\n"; } print"\n"; print"\n"; print"\n"; print"\n"; print"
 ■ $rmenu02$day$day$rmenu02
\n"; print" \n"; print" \n"; # 添付ファイルの有無 ($fileflag,$iwidth,$iheight,$tmp_ft) = &fileflag($rdate); # 初期化 $wid = ''; $cols = ''; $imgflag = 1; if($fileflag ne 0){ print" \n"; $cols = "colspan=2"; $imgflag = 0; $wid = "width=".($osize1 - $i_width); } if($imgflag && $imgloca){$wid = "width=".($osize1 - $i_width);}else{$imgflag = 0;} if($nikkiloca){ if($imgflag){print" \n";$cols = "colspan=2";} print" \n";$cols = "colspan=2";} print" \n"; print" \n"; print" \n"; $bkcolor = $kcolor; $flag = 1; $fflag = 0; $s++; } print"
\n"; if($iwidth ne 0 && $iheight ne 0){ # 添付ファイルが画像の時 (GIF,JPG,PNG) # 画像が制限よりも大きいときには縮小してリンクを張る if($iwidth>$i_width){ $iheight = int($iheight/($iwidth/$i_width)); print" \n"; }else{ print" \n"; } }else{ # 添付ファイルが画像以外の時 print" $tmp_ft\n"; } print"  \n"; }else{ if($imgflag){print"  \n"; } print"
$rcom
\n"; print"
$wcom$khen
\n"; print"
\n"; } # //// 日時の取得 ///////////////////////////////////////////////////////////////////////// sub gettime{ # 日本時間に設定 $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy,$dmy) = localtime(time); $year += 1900; $mon++; $hourn = $hour; # バックアップ用 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"; } $date = $year.$mon.$mday.$hour.$min.$sec; } # //// IEフラッグ ///////////////////////////////////////////////////////////////////////// sub ieflag{ # IEだと1を返す local($ieflag); # ブラウザ名の取得 $agent = $ENV{'HTTP_USER_AGENT'}; $ieflag = 0; if($agent =~ /MSIE 4/i || $agent =~ /MSIE 5/i || $agent =~ /MSIE 6/i){$ieflag = 1;} return($ieflag); } # //// 拡張子判定フラッグ ///////////////////////////////////////////////////////////////// sub ftflag{ # 許可しない拡張子だと1を返す local($foot) = @_; local($s,$ftflag); # 許可しない拡張子フラッグ $ftflag = 1; $s = 0; while($s<@iconft){ if($foot eq @iconft[$s]){ $ftflag = 0; last; } $s++; } return($ftflag); } # //// ファイルサイズチェックフラッグ ///////////////////////////////////////////////////// sub checksize{ # ファイルサイズが制限を越えると1を返す local($readdata) = @_; local($size,$checksize); # フラッグの初期化 $checksize = 0; # 単位はKB $size = $upsize*1024; if($readdata>$size){$checksize = 1;} return($checksize); } # //// 添付ファイルの削除 ///////////////////////////////////////////////////////////////// sub filedel{ local($filehead) = @_; local($s,$d_file); $s = 0; while($s<@iconft){ $d_file = $icon_dir.$filehead."\.".@iconft[$s]; unlink($d_file); $s++; } } # //// 添付ファイルの存在チェック ///////////////////////////////////////////////////////// sub fileflag{ local($filehead) = @_; local($s,$d_file,$fileflag,$iwidth,$iheight); # フラッグの初期化 $fileflag = 0; $s = 0; $iwidth = 0; $iheight = 0; $tmp_ft = ''; while($s<@iconft){ $d_file = $icon_dir.$filehead."\.".@iconft[$s]; if(-e $d_file){ # 画像ファイルの大きさの取得 open(STRM, "<$d_file"); binmode(STRM); if(@iconft[$s] eq 'gif'){ ($iwidth,$iheight) = &gifsize(\*STRM); }elsif(@iconft[$s] eq 'jpg'){ ($iwidth,$iheight) = &jpegsize(\*STRM); }elsif(@iconft[$s] eq 'png'){ ($iwidth,$iheight) = &pngsize(\*STRM); } if($icon_url eq ''){ $fileflag = $d_file; }else{ $fileflag = $icon_url.$filehead."\.".@iconft[$s]; } $tmp_ft = @iconft[$s]; close(STRM); last; } $s++; } return($fileflag,$iwidth,$iheight,$tmp_ft); } # //// 簡単なヘルプ /////////////////////////////////////////////////////////////////////// sub help{ print"\n"; print"\n"; print"\n"; print"\n"; print"
\n"; print" \n"; print" \n"; print"
\n"; print" ・『最近のTM通信』の\表\示\件数は、$maxkiji件です。
\n"; print" ・それ以降の記事は古いものから順に月ごとに『アルバム』に記入されていきます。
\n"; print" ・『添付ファイル』は、@iconftの拡張子のみ有効です。
\n"; print" ・『画像(GIF,JPG』の大きさは、横 $i_width\ピクセルを越えると縮小されます。
\n"; print" ・更に、縮小された『絵』に対してはアップした元ファイルにリンクが\貼\られ原寸で閲覧する事が\可\能\です。
\n"; print" ・なお、フォーム投稿時の最大サイズは、$upsize\KB以内となっています。
\n"; if($tagok){print" ・タグの使用が\可\能\です。
\n";} else{print" ・タグの使用はできません。
\n";} print" ・リンクを貼\る場合は、↓をコピーして貼\り\付けて「URL」の部分にリンク先のURLを入れて下さい。
\n"; print"  <a href=\"URL\" target=\"_blank\">URL</a>
これでリンクが貼\れます。\n"; print"
\n"; print"
\n"; } # //// 過去ログディレクトリからログファイルリストを作成 /////////////////////////////////// sub oldlist{ local(@filelist,$ofile); # 過去UP物ディレクトリのオープン opendir(DIR,$oldbox); @filelist = (); while ($ofile = readdir(DIR)){ if(index($ofile,"\.")>0){ push(@filelist,$ofile); } } closedir(DIR); # ファイル名をソートする @filelist = sort @filelist; @filelist = reverse(@filelist); return(@filelist); } # //// 過去ログへ移す /////////////////////////////////////////////////////////////////////// sub movelog{ # $mdate : (親)記事投稿日 $logfile : 移動する元ログ $oldlog : 移動先ログ(過去ログ) # (注意) ここではエラーは返さないので致命的なバグもありうる local($mdate,$logfile,$oldlog) = @_; local(@lines1,$line1,@lines2,$flag); local($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05); # 記事のオープン open(IN,"$logfile"); @lines1 = ; close(IN); foreach $line1 (@lines1){ ($rdate,$rname,$remail,$rtitle,$rcom,$rurl,$rkey,$rmenu01,$rmenu02,$rmenu03,$rmenu04,$rmenu05) = split(/\t/,$line1); if($mdate eq $rdate){ # 過去ログのオープン open(IN,"$oldbox$oldlog"); @lines2 = ; close(IN); unshift(@lines2,$line1); # ログの更新 open(OUT,">$oldbox$oldlog"); print OUT @lines2; close(OUT); # 属性の変更 if($chauto){chmod(0666,"$oldbox$oldlog");} } } } # //// 過去ログのフォーム ///////////////////////////////////////////////////////////////// sub oldform{ # $mtitle : メールのタイトル $mbody : メールの記事内容 # $temail : 送信先E-mail $femail : 送信元E-mail # 過去ログファイル一覧 @oldlist = &oldlist; if(!@oldlist){&footer;} print"
\n"; &oldloghelp; print"
\n"; # 過去ログフォーム print"\n"; if($frameok){print"\n";} print"\n"; print"\n"; print"\n"; print"\n"; print"
\n"; print "\n"; print"
\n"; print"
\n"; # 過去ログフラッグ $oldflag = 1; # 読み込むlogfileの更新 if($FORM{'old'} ne ''){$logfile = $oldbox.$FORM{'old'}."\.log";}else{$logfile = ""} } # //// SEARCH FORM ////////////////////////////////////////////////////////////////////////// sub searchform{ # Form幅の調整 &getform; # ヘルプを表示 print"
\n"; &searchhelp; print"
\n"; if($FORM{'sub'} eq ' リセット '){ $FORM{'com'} = ''; $FORM{'andor'} = ''; } print"
\n"; if($frameok){print"\n";} print"\n"; print"\n"; # SEARCH内容 print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # AND OR $a = ''; $b = ''; if($FORM{'andor'} eq 'or'){$b = 'CHECKED';} else{$a = 'CHECKED';} print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"
KEYWORD
検索条件\n"; print"AND\n"; print"OR\n"; print"
\n"; print"
\n"; # Searchフラッグ $oldflag = 1; $searchflag = 1; # 検索結果ログの吐き出し @scom = split(/ /, $FORM{'com'}); @lines = &filefind(@scom); } # //// 簡単なヘルプ(SEARCH) //////////////////////////////////////////////////////////////// sub searchhelp{ print"\n"; print"\n"; print"\n"; print"\n"; print"
\n"; print" \n"; print" \n"; print"
\n"; print" ・KEYWORDには、スペース区切りで入力します。
\n"; print" ・大文字・小文字は判断しません
\n"; print" ・TM通信の表\示数が多くなると処理に時間がかかります。
\n"; print"
\n"; print"
\n"; } # //// 簡単なヘルプ(過去ログ) ////////////////////////////////////////////////////////////// sub oldloghelp{ print"\n"; print"\n"; print"\n"; print"\n"; print"
\n"; print" \n"; print" \n"; print"
\n"; print" ・月ごとにログを\表\示\します。
\n"; print" ・下のセレクトボックスより月を選択し、「過去のTM通信を見る」を押してください。
\n"; print" ・ログでの編集/削除はできません。
\n"; print"
\n"; print"
\n"; } # //// 検索結果ログを吐き出す /////////////////////////////////////////////////////////////// sub filefind{ local(@kind) = @_; local(@lines,@log,@oldlist,@new,$line,$flag,$kind2); # ログを開いて全て一つにする(激重) # 投稿記事のログを開く open(IN,"$logfile") || &error("Can't open logfile"); @lines = ; close(IN); @log = (); # 過去ログファイル一覧 @oldlist = &oldlist; $s=0; while($s<@oldlist){ $oldlog = $oldbox.@oldlist[$s]; # 投稿記事のログを開く open(IN,"$oldlog") || &error("Can't open logfile"); @log = ; close(IN); push(@lines,@log); $s++; } @new = (); foreach $line (@lines){ $flag = 0; $s = 0; while($s<@kind){ if(@kind[$s] ne ''){ # 拡張子を全て小文字に変換 $line2 = $line; $line2 =~ tr/A-Z/a-z/; $kind2 = @kind[$s]; $kind2 =~ tr/A-Z/a-z/; if(index($line,@kind[$s])>=0 || index($line2,$kind2)>=0){ $flag = 1; if($FORM{'andor'} eq 'or'){last;} }else{ if($FORM{'andor'} eq 'and'){$flag = 0;last;} } } $s++; } if($flag){push(@new,$line);} } return(@new); } # //// GIF,JPG,PNG サイズ取得 ///////////////////////////////////////////////////////////// # 〜 WWWimagesizeより (http://www.bloodyeck.com/wwwis/) 〜 sub gifsize{ local($GIF) = @_; local($type,$a,$b,$c,$d,$s)=(0,0,0,0,0,0); if(defined( $GIF ) && read($GIF, $type, 6) && $type =~ /GIF8[7,9]a/ && read($GIF, $s, 4) == 4 ){ ($a,$b,$c,$d)=unpack("C"x4,$s); return ($b<<8|$a,$d<<8|$c); } return (0,0); } sub jpegsize { local($JPEG) = @_; local($done)=0; local($c1,$c2,$ch,$s,$length, $dummy)=(0,0,0,0,0,0); local($a,$b,$c,$d); if(defined($JPEG) && read($JPEG, $c1, 1) && read($JPEG, $c2, 1) && ord($c1) == 0xFF && ord($c2) == 0xD8 ){ while (ord($ch) != 0xDA && !$done) { # Find next marker (JPEG markers begin with 0xFF) # This can hang the program!! while (ord($ch) != 0xFF) { return(0,0) unless read($JPEG, $ch, 1); } # JPEG markers can be padded with unlimited 0xFF's while (ord($ch) == 0xFF) { return(0,0) unless read($JPEG, $ch, 1); } # Now, $ch contains the value of the marker. if ((ord($ch) >= 0xC0) && (ord($ch) <= 0xC3)) { return(0,0) unless read ($JPEG, $dummy, 3); return(0,0) unless read($JPEG, $s, 4); ($a,$b,$c,$d)=unpack("C"x4,$s); return ($c<<8|$d, $a<<8|$b ); } else { # We **MUST** skip variables, since FF's within variable names are # NOT valid JPEG markers return(0,0) unless read ($JPEG, $s, 2); ($c1, $c2) = unpack("C"x2,$s); $length = $c1<<8|$c2; last if (!defined($length) || $length < 2); read($JPEG, $dummy, $length-2); } } } return (0,0); } sub pngsize { local($PNG) = @_; local($head) = ""; local($a, $b, $c, $d, $e, $f, $g, $h)=0; if(defined($PNG) && read( $PNG, $head, 8 ) == 8 && $head eq "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" && read($PNG, $head, 4) == 4 && read($PNG, $head, 4) == 4 && $head eq "IHDR" && read($PNG, $head, 8) == 8 ){ ($a,$b,$c,$d,$e,$f,$g,$h)=unpack("C"x8,$head); return ($a<<24|$b<<16|$c<<8|$d, $e<<24|$f<<16|$g<<8|$h); } return (0,0); } # //// 管理人へ認証コードを発行する ///////////////////////////////////////////////////////// sub ninsyou{ &header; # Form幅の調整 &getform; print"
\n"; print"
\n"; print"
\n"; print"
\n"; print"\n"; print"\n"; # 管理人パスワード print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } # PASSWORD print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; print"\n"; if(&ieflag){ print"\n"; print"\n"; print"\n"; } print"
管理人パスワード
PASSWORD
\n"; &footer; } # //// 会員認証Codeを発行する ///////////////////////////////////////////////////////////// sub writecode{ # 記入漏れのチェック $error_flag = 0; if($FORM{'key'} eq ''){$error_flag = 1;} if($error_flag){&header;&error("記入漏れがあります。");} if($FORM{'key'} ne $adpwd){&header;&error("あなたは管理者ではありません。");} # Cookieを発行する &set_cookie; # ブラウザのリフレッシュ &header; print"\n"; &footer; exit; } # //// 右側フレーム /////////////////////////////////////////////////////////////////////// sub f_right{ # ログの書き込み処理 if($FORM{'mode'} eq 'writelog'){&writelog;} &header; # クッキーを取得する &get_cookie; $nnikki = ''; $vnikki = ''; $nalbum = ''; $snikki = ''; # Non Frame if(!$frameok){ if($c_key eq $adpwd){ $nnikki = "新しいTM通信を書く"; } $vnikki = "  \"最近のダイアリーをみる\" "; # 過去ログ機能時に過去ログのリンク先を表示 $onum = &oldlist; if($onum){$nalbum = "  \"過去のダイアリーをみる\" ";} $snikki = "  \"ダイアリーを検索\" "; } # 投稿フォーム if($FORM{'mode'} eq 'tform' && $c_key eq $adpwd){ if($FORM{'date'} ne ''){&kiji; print"

編集/削除

\n";} &tform;&footer; } # 過去ログ表示 if($FORM{'mode'} eq 'oldlog'){&oldform;} # 投稿フォーム (SEARCH用) if($FORM{'mode'} eq 'search'){&searchform;} if($FORM{'mode'} eq ''){print"$head_title\n";} if($FORM{'mode'} eq 'rewrite'){ if($ndkiji){&kiji;} print"

編集/削除

\n"; } # 戻り先の埋め込み # print"
$vnikki$nalbum$snikkiTOP

$nnikki\n"; print"
$vnikki$nalbum$snikki
\n"; &kiji; &footer; } # //// 左側フレーム /////////////////////////////////////////////////////////////////////// sub f_left{ # 左フレーム用に色調を変える $kabegami = ''; $back01 = $back19; $color02 = $color20; $color03 = $color20; $color04 = $color20; &header; # クッキーを取得する &get_cookie; print"
\n"; print"

$title

\n"; if($c_key eq $adpwd){ print"・ 新しいTM通信を書く
\n"; } print"・ 最近のTM通信をみる
\n"; # 過去ログ機能時に過去ログのリンク先を表示 $onum = &oldlist; if($onum){print"・ TM通信を見る
\n";} print"・ 検索
\n"; print"
\n"; &footer; exit; }