#!/usr/bin/perl #┌───────────────────────────────── #│ Fantasy Board v2.0 (2003/04/25) #│ Copyright(C) Kent Web 2003 #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'Fantasy Board v2.0'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #│ 3. 添付の home.gif は L.O.V.E の mayuRin さんによる画像です。 #└───────────────────────────────── # # 【ファイル構成例】 # # public_html (ホームディレクトリ) # | # +-- fantasy / fantasy.cgi [755] # | fantasy.log [666] # | jcode.pl [644] # | # +-- img / *.gif # | # +-- lock [777] / # # # [ チェックモードの仕方 ] : mode=check という引数を付けて呼出す # # 例 http://〜〜/fantasy.cgi?mode=check #============# # 設定 # #============# # コード変換ライブラリ取込 require './jcode.pl'; # タイトル名 $title = "MPS 掲示板"; # タイトル文字の色 $t_color = "#006699"; # タイトル文字のタイプ $t_face = "MS Pゴシック"; # タイトル文字サイズ(スタイルシートで有効) $t_point = '25px'; # 本文文字サイズ(スタイルシートで有効) $b_point = '13px'; # スクリプト名 $script = './bbs.cgi'; # ログファイル名 $logfile = './fantasy.log'; # 管理用パスワード $pass = '6140'; # 最大記事数(これを超える記事は古い順に削除されます) $max = 1000; # 戻り先 $home = "http://www.mihoome.com/"; # 画像格納ディレクトリ(絶対パスなら http://から記述) # → 最後は必ず / で閉じる $imgurl = 'http://www.mihoome.com/bbs/images/'; # 背景色、文字色 $bgrnd = ""; # 壁紙 $bgcol = "#FFCC99"; # 背景色 $text = "#006699"; # 文字色 $link = "#0000FF"; # リンク色:未訪問 $vlink = "#800080"; # リンク色:既訪問 $alink = "#DD0000"; # リンク色:訪問中 # ワンポイントカラー $onepnt = "#FF3399"; # URLの自動リンク (0=no 1=yes) $autolink = 1; # 1ページあたりの記事表示件数 $p_log = 10; # ロックファイル機構 (0=no 1=symlink関数 2=mkdir関数) $lockkey = 0; # ロックファイル名 $lockfile = './lock/fantasy.lock'; # メール通知機能 # 0=no # 1=yes:自分の投稿記事もメール通知する # 2=yes:自分の投稿記事はメール通知しない $mailing = 0; # sendmailのパス(メール通知する場合) $sendmail = '/usr/lib/sendmail'; # メール通知先アドレス(メール通知する場合) $mailto = 'xxx@xxx.xxx'; # 居住地 @areas = ('北海道','東北','関東','甲信越','東海','北陸','近畿','中国','四国','九州','海外'); # キャラクタを指定(上下の配列はペアで) @icon1 = ( 'd01.gif','d02.gif','d03.gif','d04.gif','d05.gif','d06.gif', 'd07.gif','d08.gif','d09.gif','d10.gif','d11.gif','d12.gif', 'd13.gif','d14.gif','d15.gif','d16.gif','d17.gif', 'd18.gif','d19.gif','c01.gif','c02.gif','c03.gif','c04.gif', 'c05.gif','c06.gif','n.gif','h.gif'); @icon2 = ( 'アイリッシュセッター','ポメラニアン','コリー','柴犬','ミックス','ミニチュアダックス', 'マルチーズ','プードル','紀州犬','コーギー','ブルドック','シベリアンハスキー', 'コッカースパニエル','ホワイトテリア','ボーダーコリー','ドーベルマン','ゴールデンレトリバー', 'シュナウザー','ヨークシャーテリア','ライオン','トラ','ぶち猫','ロシアンブルー', '笑い猫','トラ猫','つらいの','はじめまして'); # 管理者名 $master = "みほ"; # 返信メッセージの文字色 $masCol = "#003399"; # 管理者用アイコン $masIco = "miho.gif"; # タグ広告挿入オプション # → の代わりに「広告タグ」を挿入する。 # → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。 $banner1 = ''; # 掲示板上部に挿入 $banner2 = ''; # 掲示板下部に挿入 # アクセス制限(半角スペースで区切る) # → 拒否するホスト名又はIPアドレスを記述(アスタリスク可) # → 記述例 $deny = '*.anonymizer.com *.denyhost.xx.jp 211.154.120.*'; $deny = ''; # タイトル画像を使う場合 # → 画像URLを http:// から記述 $ImgT = "http://www.mihoome.com/bbs/images/bbs.gif"; $ImgW = 600; # 画像横幅 $ImgH = 24; # 画像縦幅 # 投稿後の処理 # → 掲示板自身のURLを記述しておくと、投稿後リロードします # → ブラウザを再読み込みしても二重投稿されない措置。 # → Locationヘッダの使用可能なサーバのみ $location = ''; # 他サイトから投稿排除時に指定 (http://から書く) $baseUrl = ""; # フォーム内文字色 $formCol1 = "black"; # フォーム下地色 $formCol2 = "whitesmoke"; #============# # 設定完了 # #============# &decode; &axs_check; if ($mode eq 'regist') { ®ist; } elsif ($mode eq 'find') { &find; } elsif ($mode eq 'howto') { &howto; } elsif ($mode eq 'admin') { &admin; } elsif ($mode eq 'usrdel') { &usrdel; } elsif ($mode eq 'image') { ℑ } elsif ($mode eq 'res') { &res_msg; } elsif ($mode eq 'check') { ✓ } &html; #----------------# # アクセス制限 # #----------------# sub axs_check { # ホスト名を取得 &get_host; local $flag=0; foreach ( split(/\s+/, $deny) ) { if (!$_) { next; } s/\*/\.\*/g; if ($host =~ /$_/i) { $flag=1; last; } } if ($flag) { &error("アクセスを許可されていません"); } } #----------------# # 記事表示処理 # #----------------# sub html { # クッキー情報を取得 local($cnam,$ceml,$curl,$cpwd,$care,$cico) = &get_cookie; &header; print "
\n"; if ($banner1 ne "") { print "$banner1

\n"; } # タイトル部 if ($ImgT) { print "\"$title\"\n"; } else { print "$title\n"; } print <<"EOM";


[トップに戻る] [留意事項] [ワード検索] [管理用]
お名前
Eメール
参照先
地域   "; # イメージの選択フォームを表示 print "イメージ   [アイコン参照]
メッセージ

   削除キー (記事削除時に使用)
クッキーを保存
EOM $i=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { $i++; if ($i < $page + 1) { next; } if ($i > $page + $p_log) { last; } ($no,$date,$name,$mail,$area,$icon,$icon2,$com,$res,$url,$host,$pw) = split(/<>/); if ($mail) { $name = "$name"; } if ($url) { $url = ""; } # 1ワクの大きさ $pix=18; # 記事を表示 print "\n"; # 反転対象部分1 if (!$flag) { print "\n"; print "
\n"; print "\n"; print "\n"; } else { print "

\n"; print "\n"; } print "\n"; print "\n"; print "\n"; # 反転対象部分2 if ($flag == 0) { print "\n"; } else { print "\n"; } print "\n"; print "\n"; if ($flag == 1) { print "\n"; } print "\n"; # 反転対象部分3 if ($flag == 0) { print "\n"; } print "\n"; print "\n"; print "\n"; if ($flag == 1) { print "\n"; } print "



\n"; print "[$no] $name [$area] "; print "$date $url
\n"; print "
$com
\n"; # 管理者レス if ($res) { # print "
\n"; print ""; print "\n"; print "\n"; print "

$res
\n"; print "[ From $master ]
\n"; } print "




\n"; if ($flag == 1) { print "
\n"; } print "
\n"; print "

\n"; if ($flag == 0) { $flag = 1;} else { $flag = 0; } } close(IN); $next = $page + $p_log; $back = $page - $p_log; print "\n"; if ($back >= 0) { print "\n"; } if ($next < $i) { print "\n"; } print <<"EOM";
\n"; print "\n"; print "
\n"; print "\n"; print "
記事No 削除キー
$banner2

- Fantasy Board -

EOM exit; } #------------# # 記事投稿 # #------------# sub regist { local($date,@week,@lines); # 他サイトからのアクセスを排除 if ($baseUrl) { local $ref = $ENV{'HTTP_REFERER'}; $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if ($ref !~ /$baseUrl/i) { &error("不正なアクセスです"); } } # フォーム内容をチェック if ($in{'name'} eq "") { &error("名前が入力されていません"); } if ($in{'com'} eq "") { &error("コメントが入力されていません"); } if ($in{'icon'} < 0 || $in{'icon'} > @icon1) { &error("アイコン指定が不正です $in{'icon'}"); } # ロック処理 &lock if ($lockkey); open(IN,"$logfile") || &error("Open Error: $logfile"); @lines = ; close(IN); local($no,$dat,$nam,$eml,$are,$ico,$ico2,$com) = split(/<>/, $lines[0]); &error("二重投稿は禁止です") if ($in{'name'} eq $nam && $in{'com'} eq $com); # 記事Noを採番 $no++; # 削除キーを暗号化 if ($in{'pwd'}) { $pwd = &encrypt($in{'pwd'}); } # 日時取得 $ENV{'TZ'} = "JST-9"; local($min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[1..6]; # 日時のフォーマット @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); # URL自動リンク if ($autolink) { &auto_link($in{'com'}); } # 最大記事数処理 while ($max <= @lines) { pop(@lines); } # 更新 unshift(@lines,"$no<>$date<>$in{'name'}<>$in{'email'}<>$areas[$in{'area'}]<>$icon1[$in{'icon'}]<><>$in{'com'}<><>$in{'url'}<>$host<>$pwd<>\n"); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @lines; close(OUT); # ロック解除 &unlock if ($lockkey); if ($in{'cook'} == 1) { &set_cookie($in{'name'},$in{'email'},$in{'url'},$in{'pwd'},$in{'area'},$in{'icon'}); } # メール通知処理 if ($mailing == 1) { &mail_to; } elsif ($mailing == 2 && $in{'email'} ne $mailto) { &mail_to; } # リロード if ($location) { if ($ENV{'PERLXS'} eq "PerlIS") { print "HTTP/1.0 302 Temporary Redirection\r\n"; print "Content-type: text/html\n"; } print "Location: $location?\n\n"; } else { &header; print "

\n"; print "

投稿は正常に処理されました

\n"; print "
\n"; print "
\n"; print "
\n\n"; } exit; } #--------------# # ワード検索 # #--------------# sub find { &header; print <<"EOM"; [
戻る]
  • 検索したいキーワードを入力し、検索条件を選択して「検索」を押してください。
  • キーワードは「半角スペース」で区切って複数指定することができます。
    キーワード 検索条件 \n
    \n
\n"; # ワード検索の実行と結果表示 if ($in{'word'} ne "") { $in{'word'} =~ s/ / /g; @pairs = split(/\s+/, $in{'word'}); # 検索処理 print "
\n"; $i=0; open(IN,"$logfile") || &error("Open Error : $logfile"); while () { $flag = 0; foreach $pair (@pairs) { if (index($_,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } next if (!$flag); # 結果を表示 $i++; ($no,$date,$name,$mail,$area,$icon,$ico2,$com,$res,$url) = split(/<>/); if ($mail) { $name = "$name"; } if ($url) { $url = "http://$url"; } print "[$no] 投稿者:$name 投稿日:$date
\n"; print "
$com

$url


\n"; } close(IN); print "検索結果は $i件です。\n"; } print "\n\n"; exit; } #------------# # 入室画面 # #------------# sub enter { &header; print <<"EOM"; [戻る]

パスワードを入力して下さい

EOM exit; } #--------------# # 管理モード # #--------------# sub admin { if ($in{'pass'} eq "") { &enter; } elsif ($in{'pass'} ne $pass) { &error("パスワードが違います"); } $p_log *= 2; # 削除 if ($in{'job'} eq "del" && $in{'no'}) { # ロック開始 &lock if ($lockkey); # 削除情報マッチング local @new=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { $flag=0; ($no) = split(/<>/); foreach $del ( split /\0/, $in{'no'} ) { if ($no == $del) { $flag=1; last; } } if (!$flag) { push(@new,$_); } } close(IN); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @new; close(OUT); # ロック解除 &unlock if ($lockkey); # 返信画面 } elsif ($in{'job'} eq "res" && $in{'no'}) { local @no = split(/\0/, $in{'no'}); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { @f = split(/<>/); last if ($f[0] == $no[0]); } close(IN); # 画面へ &edit_form(@f); # 返信実行 } elsif ($in{'job'} eq "res2") { # URLリンク if ($autolink) { &auto_link($in{'com'}); } # タグ有効 if ($in{'tag'} == 1) { $in{'com'} =~ s/</) { ($no,$dat,$nam,$eml,$area,$ico,$ico2,$com,$res,$url,$hos,$pw) = split(/<>/); if ($in{'no'} == $no) { $_="$no<>$dat<>$nam<>$eml<>$area<>$ico<>$ico2<>$com<>$in{'com'}<>$url<>$hos<>$pw<>\n"; } push(@new,$_); } close(IN); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @new; close(OUT); # ロック解除 &unlock if ($lockkey); } &header; print <戻る]
EOM $i=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { $i++; if ($i < $page + 1) { next; } if ($i > $page + $p_log) { last; } ($no,$dat,$nam,$eml,$area,$ico,$ico2,$com,$res,$url,$hos) = split(/<>/); if ($eml) { $nam = "$nam"; } $com =~ s/<([^>]|\n)*>//g; if (length($com) > 50) { $com = substr($com,0,48); $com .= "..."; } $res =~ s/<([^>]|\n)*>//g; if (length($res) > 50) { $res = substr($res,0,48); $res .= "..."; } print "

[$no] $nam - $dat - $hos
内容:$com\n"; print "
返信:$res\n" if ($res); } close(IN); print "

\n"; $next = $page + $p_log; $back = $page - $p_log; print "

\n"; if ($back >= 0) { print "\n"; } if ($next < $i) { print "\n"; } print <
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
EOM exit; } #------------# # 返信画面 # #------------# sub edit_form { local($no,$dat,$nam,$eml,$area,$ico,$ico2,$com,$res,$url,$hos,$pw) = @_; local($pattern) = 'http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+'; $res =~ s/($pattern)<\/a>/$1/go; $res =~ s/
/\r/ig; &header; print <<"EOM";

[$no] 投稿者:$nam [$area] $dat

$com
返信メッセージ     HTMLタグ有効

EOM exit; } #------------# # 留意事項 # #------------# sub howto { &header; print <<"EOM";

- 留意事項 -

  1. この掲示板はクッキー対応です。1度記事を投稿いただくと、おなまえ、Eメール、URL、削除キーの情報は2回目以降は自動入力されます。(ただし利用者のブラウザがクッキー対応の場合)

  2. 投稿記事には、タグは一切使用できません。

  3. 記事を投稿する上での必須入力項目は「おなまえ」「メッセージ」です。Eメール、URL、削除キーは任意です。

  4. 記事には、半角カナは一切使用しないで下さい。文字化けの原因となります。

  5. 記事の投稿時に「削除キー」にパスワード(英数字で8文字以内)を入れておくと、その記事は次回削除キーによって削除することができます。

  6. 記事の保持件数は最大 $max件です。それを超えると古い順に自動削除されます。

  7. 過去の投稿記事から「キーワード」によって簡易検索ができます。トップメニューの「ワード検索」のリンクをクリックすると検索モードとなります。

  8. 管理者が著しく不利益と判断する記事や他人を誹謗中傷する記事は予\告なく削除することがあります。

EOM exit; } #------------------# # ユーザ記事削除 # #------------------# sub usrdel { # 他サイトからのアクセスを排除 if ($baseUrl) { local $ref = $ENV{'HTTP_REFERER'}; $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if ($ref !~ /$baseUrl/i) { &error("不正なアクセスです"); } } if ($in{'no'} eq '' || $in{'pwd'} eq '') { &error("削除Noまたは削除キーが入力モレです"); } # ロック処理 &lock if ($lockkey); open(IN,"$logfile") || &error("Open Error : $logfile"); @lines = ; close(IN); $flag=0; @new=(); foreach (@lines) { ($no,$date,$name,$mail,$area,$icon,$ico2,$com,$res,$url,$host,$pw) = split(/<>/); if ($in{'no'} == $no) { $flag=1; $PW=$pw; } else { push(@new,$_); } } if ($flag == 0) { &error("該当記事が見当たりません"); } if ($PW eq '') { &error("該当記事には削除キーが設定されていません"); } # 削除キーを照合 $match = &decrypt($in{'pwd'}, $PW); if ($match ne 'yes') { &error("削除キーが違います"); } open(OUT,">$logfile") || &error("Open Error: $logfile"); print OUT @new; close(OUT); # ロック解除 &unlock if ($lockkey); } #----------------# # デコード処理 # #----------------# sub decode { local($buf, $key, $val); if ($ENV{'REQUEST_METHOD'} eq "POST") { $post_flag=1; if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); } read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $post_flag=0; $buf = $ENV{'QUERY_STRING'}; } %in=(); foreach (split(/&/, $buf)) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # S-JISコード変換 &jcode'convert(*val, 'sjis'); # タグ処理 $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $val =~ s/\0//g; # 改行処理 if ($key eq "com") { $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; } else { $val =~ s/\r//g; $val =~ s/\n//g; } $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } $in{'url'} =~ s/^http\:\/\///; $mode = $in{'mode'}; $page = $in{'page'}; } #--------------# # HTMLヘッダ # #--------------# sub header { $headflag=1; print "Content-type: text/html\n\n"; print <<"EOM"; $title EOM if ($bgrnd) { print "\n"; } else { print "\n"; } } #--------------# # エラー処理 # #--------------# sub error { &unlock if ($lockflag); &header if (!$headflag); print "

ERROR !

\n"; print "$_[0]\n"; print "

\n\n\n"; exit; } #----------------# # クッキー発行 # #----------------# sub set_cookie { local(@cook) = @_; local($gmt, $cook, @t, @m, @w); @t = gmtime(time + 60*24*60*60); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 国際標準時を定義 $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]); # 保存データをURLエンコード $cook=''; foreach (@cook) { s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $cook .= "$_<>"; } # 格納 print "Set-Cookie: FANTA_BBS=$cook; expires=$gmt\n"; } #----------------# # クッキー取得 # #----------------# sub get_cookie { local($key, $val, *cook); # クッキーを取得 $cook = $ENV{'HTTP_COOKIE'}; # 該当IDを取り出す foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; } # データをURLデコードして復元 @cook=(); foreach ( split(/<>/, $cook{'FANTA_BBS'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; push(@cook,$_); } return (@cook); } #----------------# # ホスト名取得 # #----------------# sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } } #------------------# # パスワード暗号 # #------------------# sub encrypt { local($inpw) = $_[0]; local(@SALT, $salt, $encrypt); @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; $encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt); return $encrypt; } #------------------# # パスワード照合 # #------------------# sub decrypt { local($inpw, $logpw) = @_; local($salt, $check); $salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); $check = "no"; if (crypt($inpw, $salt) eq $logpw || crypt($inpw, '$1$' . $salt) eq $logpw) { $check = "yes"; } return $check; } #--------------# # ロック処理 # #--------------# sub lock { local($retry)=5; # 1分以上古いロックは削除する if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { &unlock; } } # symlink関数式ロック if ($lockkey == 1) { while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error('LOCK is BUSY'); } sleep(1); } # mkdir関数式ロック } elsif ($lockkey == 2) { while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error('LOCK is BUSY'); } sleep(1); } } $lockflag=1; } #--------------# # ロック解除 # #--------------# sub unlock { if ($lockkey == 1) { unlink($lockfile); } elsif ($lockkey == 2) { rmdir($lockfile); } $lockflag=0; } #--------------# # メール送信 # #--------------# sub mail_to { local($hp, $mbody); if ($in{'url'}) { $hp = "http://$in{'url'}"; } else { $hp = ""; } $mbody = <<"EOM"; 投稿日時:$date ホスト名:$host ブラウザ:$ENV{'HTTP_USER_AGENT'} おなまえ:$in{'name'} Eメール:$in{'email'} URL :$hp $in{'com'} EOM $mbody =~ s/
/\n/g; # メールアドレスがない場合 if ($in{'email'} eq "") { $email2 = $mailto; } else { $email2 = $in{'email'}; } # sendmail起動 open(MAIL,"| $sendmail -t") || &error("メール送信失敗"); print MAIL "To: $mailto\n"; print MAIL "From: $email2\n"; print MAIL "Subject: POST BBS (no.$no) \n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; foreach ( split(/\n/, $mbody) ) { &jcode'convert(*_, 'jis', 'sjis'); print MAIL $_, "\n"; } close(MAIL); } #----------------# # イメージ表示 # #----------------# sub image { local($i,$j,$stop); &header; print "
\n"; print "画像イメージ
\n"; print "

\n"; $i=0; $j=0; $stop = @icon1; foreach (0 .. $#icon1) { $i++; $j++; print "\n"; if ($j != $stop && $i >= 5) { print "\n"; $i=0; } elsif ($j == $stop) { if ($i == 0) { last; } while ($i < 5) { print ""; $i++; } } } print "
\"$icon1[$_]\" $icon2[$_]


\n"; print "

\n"; print "
\n\n\n"; exit; } #-----------------# # 自動URLリンク # #-----------------# sub auto_link { $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1
$2<\/a>/g; } #------------------# # チェックモード # #------------------# sub check { &header; print "

Check Mode

\n"; print "
    \n"; # ログパス if (-e $logfile) { print "
  • ログファイルのパス:OK\n"; } else { print "
  • ログファイルのパス:NG → $logfile\n"; } # ログパーミッション if (-r $logfile && -w $logfile) { print "
  • ログファイルのパーミッション:OK\n"; } else { print "
  • ログファイルのパーミッション:NG\n"; } # ロックディレクトリ print "
  • ロック形式:"; if ($lockkey == 0) { print "ロック設定なし\n"; } else { if ($lockkey == 1) { print "symlink\n"; } else { print "mkdir\n"; } ($lockdir) = $lockfile =~ /(.*)[\\\/].*$/; print "
  • ロックディレクトリ:$lockdir\n"; if (-d $lockdir) { print "
  • ロックディレクトリのパス:OK\n"; } else { print "
  • ロックディレクトリのパス:NG → $lockdir\n"; } if (-r $lockdir && -w $lockdir && -x $lockdir) { print "
  • ロックディレクトリのパーミッション:OK\n"; } else { print "
  • ロックディレクトリのパーミッション:NG → $lockdir\n"; } } print "
\n\n\n"; exit; }