#!/usr/local/bin/perl #┌───────────────────────────────── #│ G-LIGHT v5.1 (2004/02/06) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'G-LIGHT v5.1'; #┌───────────────────────────────── #│[ 注意事項 ] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #│ 3. 添付の home.gif は L.O.V.E の mayuRin さんによる画像です。 #└───────────────────────────────── # # 【ディレクトリ構成例】 # # public_html # | # +-- glight / glight.cgi [705] # | glightlog.cgi [606] # | logview.pl [604] # | admin.pl [604] # | jcode.pl [604] # | count.dat [606] # | pastno.dat [606] # | # +-- img / *.gif # | # +-- lock [707] / # | # +-- past [707] / 0001.cgi [606] #------------------------------------------------- # 基本設定 #------------------------------------------------- # 外部ファイル取り込み require './jcode.pl'; $logview = './logview.pl'; $admin = './admin.pl'; # タイトル名 $title = "異動届(支部→本部)"; # タイトル文字の色 $t_col = "#666666"; # タイトル文字サイズ $t_size = '22px'; # タイトル画像を使う場合 (http://から画像を指定) $t_img = ""; $t_w = 300; # 横幅サイズ $t_h = 70; # 縦幅サイズ # 本文文字サイズ $b_size = '13px'; # 本文文字スタイル $b_face = "MS UI Gothic, MS Pゴシック, Osaka"; # 記事題名&カウンタの色 $sub_col = "#DD0000"; # 管理者レスの色 $res_col = "#008000"; # 本体スクリプトURL $script = './glight.cgi'; # ログファイル $logfile = './glightlog.cgi'; # カウンタログ $cntfile = './count.dat'; # カウンタの桁数 # → カウンタを付けない場合は 0 とする $count_fig = 6; # 管理用パスワード $pass = 'kimu3307'; # 最大記事数(これを超える記事は古い順に削除) $max = 3000; # 戻り先URL $home = "../index.htm"; # bodyタグ $body = ''; # 地域名 @area = ('笠岡支部','井原支部','矢掛支部'); # アイコンを使用 (0=no 1=yes) $icon_mode = 1; # アイコン指定 # → 上下の配列はペアで指定 (スペースで区切る) $ico1 = '01.gif 02.gif 03.gif 04.gif'; $ico2 = '異動 入会 脱会 訂正'; # 管理者アイコン # → スペースで区切って複数指定可能 $ico3 = 'dog.gif cat.gif'; # アイコンディレクトリ $imgurl = './img'; # 1ページあたりの記事表示件数 $pageView = 10; # ファイルロック形式 # → 0=no 1=symlink関数 2=mkdir関数 $lockkey = 0; # ロックファイル名 $lockfile = './lock/glight.lock'; # メール通知機能 # 0 : 通知しない # 1 : 通知する → 自分の投稿記事も通知する # 2 : 通知する → 自分の投稿記事は通知しない $mailing = 0; # sendmailパス(メール通知する場合) $sendmail = '/usr/lib/sendmail'; # メール通知先アドレス(メール通知する場合) $mailto = 'info@ikasa.or.jp'; # タグ広告挿入オプション # → の代わりに「広告タグ」を挿入。 # → 広告タグ以外に、MIDIタグやLimeCounter等のタグにも使用可能。 $banner1 = ''; # 表示部上部に挿入 $banner2 = ''; # 表示部下部に挿入 # URL自動リンク # → 0=no 1=yes $autolink = 1; # イメージ参照画面の表示形態 # 1 : JavaScriptで表示 # 2 : HTMLで表示 $ImageView = 1; # イメージ参照画面のサイズ (JavaScriptの場合) $img_w = 550; # 横幅 $img_h = 450; # 高さ # 記事の更新は method=POST 限定する場合(セキュリティ対策) # → 0=no 1=yes $postonly = 0; # 他サイトから投稿排除時に指定する場合(セキュリティ対策) # → 掲示板のURLをhttp://から書く $baseUrl = ''; # 投稿制限(セキュリティ対策) # 0 : しない # 1 : 同一IPアドレスからの投稿間隔を制限する # 2 : 全ての投稿間隔を制限する $regCtl = 2; # 制限投稿間隔(秒数) # → $regCtl での投稿間隔 $wait = 1; # 投稿後の処理 # → 掲示板自身のURLを記述しておくと、投稿後リロードします # → ブラウザを再読み込みしても二重投稿されない措置。 # → Locationヘッダの使用可能なサーバのみ $location = ''; # ホスト取得方法 # 0 : gethostbyaddr関数を使わない # 1 : gethostbyaddr関数を使う $gethostbyaddr = 0; # アクセス制限(半角スペースで区切る) # → 拒否するホスト名又はIPアドレスを記述(アスタリスク可) # → 記述例 $deny = '*.anonymizer.com 211.154.120.*'; $deny = ''; # 過去ログ機能 (0=no 1=yes) $pastkey = 0; # 過去ログディレクトリ $pastdir = './past'; # 過去ログカウントファイル $pastno = './pastno.dat'; # 過去ログ1ファイル当りの最大件数 $pastmax = 600; #------------------------------------------------- # 設定完了 #------------------------------------------------- &decode; &axsCheck; if ($mode eq "regist") { ®ist; } elsif ($mode eq "howto") { &howto; } elsif ($mode eq "find") { &find; } elsif ($mode eq "usrdel") { &usrdel; } elsif ($mode eq "image") { ℑ } elsif ($mode eq "past" && $pastkey) { &past; } elsif ($mode eq "admin") { require $admin; &admin; } elsif ($mode eq "check") { ✓ } &logfile; #------------------------------------------------- # アクセス制限 #------------------------------------------------- sub axsCheck { # IP&ホスト取得 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($gethostbyaddr && ($host eq "" || $host eq $addr)) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2); } if ($host eq "") { $host = $addr; } local($flag)=0; foreach ( split(/\s+/, $deny) ) { s/\./\\\./g; s/\*/\.\*/g; s/\?/\.\?/g; if ($host =~ /$_/i || $addr =~ /$_/i) { $flag=1; last; } } if ($flag) { &error("アクセスを許可されていません"); } } #------------------------------------------------- # 記事表示 #------------------------------------------------- sub logfile { local($i,$next,$back,$flag,@f,@ico1,@ico2,@ico3); # タイトル名 &header("ImageUp"); # カウンタ &counter if ($count_fig); print ""; if ($t_img) { print "\"$title\"\n"; } else { print ""; } # メニュー部 print <戻る EOM if ($pastkey) { print "| 過去ログ \n"; } print <管理用 | EOM # アイコン定義 @ico1 = split(/\s+/, $ico1); @ico2 = split(/\s+/, $ico2); @ico3 = split(/\s+/, $ico3); # クッキー取得 local($cnam,$ceml,$curl,$cpwd,$care,$cico) = get_cookie(); # 投稿フォーム &form("","",$cnam,$ceml,$care,$cico,"","","",$curl,"",$cpwd); print <) { $i++; next if ($i < $page + 1); next if ($i > $page + $pageView); @f = split(/<>/); &glog(@f); } close(IN); &log_end; $next = $page + $pageView; $back = $page - $pageView; $flag=0; print "\n"; if ($back >= 0) { $flag++; print "\n"; } if ($next < $i) { $flag++; print "\n"; } # ページ移動ボタン表示 if ($flag) { print "\n"; } else { print ""; } # 著作権表示(削除禁止) print <
\n"; print "\n"; print "
\n"; print "\n"; print "
\n"; &mvbtn("$script?page=", $i, $pageView, 15); print "
No 削除キー

EOM exit; } #------------------------------------------------- # 記事書込 #------------------------------------------------- sub regist { local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,@file,@w); # 投稿チェック if ($postonly && !$post_flag) { &error("不正なアクセスです"); } if ($baseUrl) { &refCheck; } # フォーム内容をチェック if ($in{'name'} eq "") { &error("名前が入力されていません"); } if ($in{'comment'} eq "") { &error("コメントが入力されていません"); } if ($in{'url'} eq "http://" || $in{'url'} eq "https://") { $in{'url'}=""; } # ロック処理 &lock if ($lockkey); open(IN,"$logfile") || &error("Open Error: $logfile"); @file = ; close(IN); # 重複投稿チェック local($no,$dat,$nam,$eml,$area,$ico,$icom, $com,$res,$url,$hos,$pw,$sub,$tim) = split(/<>/, $file[0]); # 連続投稿チェック $time = time; $flag=0; if ($regCtl == 1) { if ($host eq $hos && $time - $tim < $wait) { $flag=1; } } elsif ($regCtl == 2) { if ($time - $tim < $wait) { $flag=1; } } if ($flag) { &error("現在投稿制限中です。もうしばらくたってから投稿をお願いします"); } # 記事Noを採番 $no++; # 削除キーを暗号化 if ($in{'pwd'} ne "") { $pwd = &encrypt($in{'pwd'}); } # 時間を取得 local($min,$hour,$mday,$mon,$year,$wday) = (localtime($time))[1..6]; @w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$w[$wday],$hour,$min); # 記事数調整 @past=(); while ($max <= @file) { $past = pop(@file); push(@past,$past) if ($pastkey); } # 過去ログ if (@past > 0) { &pastmake(@past); } # 更新 unshift(@file,"$no<>$date<>$in{'name'}<>$in{'email'}<>$in{'area'}<>$in{'icon'}<><>$in{'comment'}<>$in{'comment2'}<>$in{'url'}<>$host<>$pwd<>$in{'sub'}<>$time<>\n"); open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @file; 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 # アイコン定義 @ico1 = split(/\s+/, $ico1); @ico2 = split(/\s+/, $ico2); @ico3 = split(/\s+/, $ico3); &search(); print "\n"; exit; } #------------------------------------------------- # 留意事項 #------------------------------------------------- sub howto { &header; print <

留意事項

  1. この掲示板はクッキー対応です。一度記事を投稿いただくと、おなまえ、Eメール、URL、削除キーの情報は2回目以降は自動入力されます。(ブラウザがクッキー対応の場合)
  2. 投稿記事には、HTMLタグは一切使用できません。
  3. 記事を投稿する上での必須入力項目は「おなまえ」「メッセージ」です。Eメール、URL、題名、削除キーは任意です。
  4. 記事には、半角カナは一切使用しないで下さい。文字化けの原因となります。
  5. 記事の投稿時に「削除キー」にパスワード(英数字で8文字以内)を入れておくと、その記事は後に削除キーによって削除することができます。
  6. 記事の保持件数は最大$max件です。それを超えると古い順に自動削除されます。
  7. 過去の投稿記事から「キーワード」によって簡易検索ができます。トップメニューの「ワード検索」のリンクをクリックすると検索モードとなります。
  8. 管理者が著しく不利益と判断する記事や他人を誹謗中傷する記事は予\告なく削除することがあります。

EOM exit; } #------------------------------------------------- # 記事削除 #------------------------------------------------- sub usrdel { local($f,$chk,@data); # 投稿チェック if ($postonly && !$post_flag) { &error("不正なアクセスです"); } if ($baseUrl) { &refCheck; } if ($in{'no'} eq "") { &error("記事Noが未入力です"); } if ($in{'pwd'} eq "") { &error("削除キーが未入力です"); } # ロック処理 &lock if ($lockkey); $f=0; @data=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$dat,$nam,$eml,$area,$ico,$icom, $com,$res,$url,$hos,$pw,$sub,$tim) = split(/<>/); if ($in{'no'} == $no) { if ($pw eq "") { $f=1; } else { $f=2; $chk = &decrypt($in{'pwd'},$pw); } next; } push(@data,$_); } close(IN); if ($f == 0) { &error("該当の記事は存在しません"); } elsif ($f == 1) { &error("この記事には削除キーが設定されていません"); } if ($chk != 1) { &error("削除キーが違います"); } # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # ロック解除 &unlock if ($lockkey); # 完了メッセージ &header; print "\n"; print "削除は正常に処理されました\n"; print "
\n"; print "
\n"; print "\n\n"; exit; } #------------------------------------------------- # メール送信 #------------------------------------------------- sub mail_to { local($msub,$mbody,$mcom,$email); # 本文の改行・タグを復元 $mcom = $in{'comment'}; $mcom =~ s/
/\n/g; $mcom =~ s/<//g; $mcom =~ s/"/"/g; $mcom =~ s/&/&/g; $mbody = "$titleに以下の投稿がありました。\n\n"; $mbody .= "Date : $date\n"; $mbody .= "Host : $host\n"; $mbody .= "Agent: $ENV{'HTTP_USER_AGENT'}\n\n"; $mbody .= "名前 : $in{'name'}\n"; $mbody .= "Email: $in{'email'}\n"; $mbody .= "題名 : $in{'sub'}\n"; $mbody .= "URL : $in{'url'}\n" if ($in{'url'}); $mbody .= "地域 : $area[$in{'area'}]\n"; $mbody .= "\n$mcom\n"; # 題名をBASE64化 $msub = &base64("[$title: $no] $in{'sub'}"); # メールアドレスがない場合 if ($in{'email'} eq "") { $email = $mailto; } else { $email = $in{'email'}; } # sendmail送信 open(MAIL,"| $sendmail -t") || &error("メール送信失敗"); print MAIL "To: $mailto\n"; print MAIL "From: $email\n"; print MAIL "Subject: $msub\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); } #------------------------------------------------- # BASE64変換 #------------------------------------------------- # とほほのWWW入門で公開されているルーチンを # 参考にしました。( http://tohoho.wakusei.ne.jp/ ) sub base64 { local($sub) = @_; &jcode'convert(*sub, 'jis', 'sjis'); $sub =~ s/\x1b\x28\x42/\x1b\x28\x4a/g; $sub = "=?iso-2022-jp?B?" . &b64enc($sub) . "?="; $sub; } sub b64enc { local($ch)="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; local($x, $y, $z, $i); $x = unpack("B*", $_[0]); for ($i=0; $y=substr($x,$i,6); $i+=6) { $z .= substr($ch, ord(pack("B*", "00" . $y)), 1); if (length($y) == 2) { $z .= "=="; } elsif (length($y) == 4) { $z .= "="; } } $z; } #------------------------------------------------- # カウンタ #------------------------------------------------- sub counter { local($file,$cnt,$ip); # ロック処理 &lock if ($lockkey && !$mode); open(IN,"$cntfile") || &error("Open Error: $cntfile"); $file = ; close(IN); ($cnt,$ip) = split(/:/, $file); # カウント更新 if (!$mode && $addr ne $ip) { $cnt++; open(OUT,">$cntfile") || &error("Write Error: $cntfile"); print OUT "$cnt:$addr"; close(OUT); } # ロック解除 &unlock if ($lockkey && !$mode); # 表示 while (length($cnt) < $count_fig) { $cnt = '0' . $cnt; } print "\n"; } #------------------------------------------------- # 過去ログ画面 #------------------------------------------------- sub past { local($no,$i,$file,$next,$back); # 表示ファイル取り込み require $logview; # アイコン定義 @ico1 = split(/\s+/, $ico1); @ico2 = split(/\s+/, $ico2); @ico3 = split(/\s+/, $ico3); open(IN,"$pastno") || &error("Open Error: $pastno"); $no = ; close(IN); $in{'pastlog'} =~ s/\D//g; if (!$in{'pastlog'}) { $in{'pastlog'} = $no; } &header; print <
過去ログ
\n"; $file = sprintf("%s\/%04d.cgi", $pastdir,$in{'pastlog'}); print "
\n"; print "\n"; print "\n"; $para = "&pastlog=$in{'pastlog'}"; &search("past", $file); $i=0; open(IN,"$file") || &error("Open Error: $file"); while () { $i++; next if ($i < $page + 1); next if ($i > $page + $pageView); @f = split(/<>/); &glog(@f); } close(IN); &log_end; $next = $page + $pageView; $back = $page - $pageView; $flag=0; print "\n"; if ($back >= 0) { $flag++; print "\n"; } if ($next < $i) { $flag++; print "\n"; } # ページ移動ボタン表示 if ($flag) { print "\n"; } else { print ""; } print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; &mvbtn("$script?mode=past&pastlog=$in{'pastlog'}&page=", $i, $pageView, 20); print "
\n\n"; exit; } #------------------------------------------------- # 検索処理 #------------------------------------------------- sub search { local($md,$target) = @_; print < 条件 表\示 EOM # ワード検索の実行と結果表示 if ($in{'word'} ne "") { local($i,$wd,$flag,$next,$back,$enwd,@wd,@find); # 表示ファイル取り込み require $logview; # 入力内容を整理 $in{'word'} =~ s/\x81\x40/ /g; @wd = split(/\s+/, $in{'word'}); # 検索 $i=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { $flag=0; foreach $wd (@wd) { if (index($_,$wd) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } if ($flag) { $i++; next if ($i < $page + 1); next if ($i > $page + $in{'view'}); push(@find,$_); } } close(IN); print "▽ $in{'word'} に関連する記事は$i件見つかりました。\n"; foreach (@find) { @f = split(/<>/); &glog(@f); } &log_end; $next = $page + $in{'view'}; $back = $page - $in{'view'}; $enwd = &url_enc($in{'word'}); if ($back >= 0) { print "[前の$in{'view'}件]\n"; } if ($next < $i) { print "[次の$in{'view'}件]\n"; } print "\n"; exit; } } #------------------------------------------------- # 過去ログ生成 #------------------------------------------------- sub pastmake { local(@past) = @_; local($count,$pastfile,$i,$f,@data); # 過去ログファイル名を定義 open(NO,"$pastno") || &error("Open Error: $pastno"); $count = ; close(NO); $pastfile = sprintf("%s\/%04d\.cgi", $pastdir,$count); # 過去ログを開く $i=0; $f=0; @data=(); open(IN,"$pastfile") || &error("Open Error: $pastfile"); while () { $i++; push(@data,$_); # 最大件数を超えると中断 if ($i >= $pastmax) { $f++; last; } } close(IN); # 最大件数をオーバーすると次ファイルを自動生成 if ($f) { # カウントファイル更新 $count++; open(NO,">$pastno") || &error("Write Error: $pastno"); print NO $count; close(NO); $pastfile = sprintf("%s\/%04d\.cgi", $pastdir,$count); @data = @past; } else { unshift(@data,@past); } # 過去ログを更新 open(OUT,">$pastfile") || &error("Write Error: $pastfile"); print OUT @data; close(OUT); if ($f) { chmod(0666, $pastfile); } } #------------------------------------------------- # デコード処理 #------------------------------------------------- sub decode { local($buf,$key,$val); undef(%in); 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'}; } foreach (split(/&/, $buf)) { ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # S-JISコード変換 &jcode'convert(*val, 'sjis'); # タグ処理 $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $val =~ s/\0//g; # 改行処理 if ($key =~ /^comment/) { $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; } $page = $in{'page'}; $mode = $in{'mode'}; # タイムゾーン設定 $ENV{'TZ'} = "JST-9"; $lockflag=0; $headflag=0; } #------------------------------------------------- # HTMLヘッダ #------------------------------------------------- sub header { if ($headflag) { return; } print "Content-type: text/html\n\n"; print <<"EOM"; EOM # JavaScriptヘッダー if ($ImageView == 1 && $_[0] eq "ImageUp") { print "\n"; print "\n"; } print "$title\n$body\n"; $headflag=1; } #------------------------------------------------- # エラー処理 #------------------------------------------------- sub error { if ($lockflag) { &unlock; } &header; print <

ERROR !

$_[0]

EOM exit; } #------------------------------------------------- # 投稿フォーム #------------------------------------------------- sub form { local($no,$dat,$nam,$eml,$area,$ico,$icom,$com,$res,$url,$hos,$pw,$sub,$tim) = @_; # URL $url ||= 'http://'; # 改行復元 $com =~ s/
/\r/g; $res =~ s/
/\r/g; print < 登録する。(入会登録に関しては、後日入会用紙・口座振替依頼書のコピーを本部に郵送して下さい)
送信者
支部名
区分
事業所名 [会員検索]
詳細
削除キー (英数字で8文字以内)
EOM foreach (0 .. $#area) { if ($area eq $_) { print ""; } else { print ""; } } print ""; if ($icon_mode) { print ""; foreach (0 .. $#ico1) { if ($ico eq $_) { print ""; } else { print ""; } } print ""; # イメージ参照のリンク if ($ImageView == 1) { print ""; } else { print ""; } } print </, $cook{'GLIGHT'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg; push(@cook,$_); } return (@cook); } #------------------------------------------------- # 自動リンク #------------------------------------------------- sub auto_link { local($_) = @_; s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1$2<\/a>/g; $_; } #------------------------------------------------- # URLエンコード #------------------------------------------------- sub url_enc { local($_) = @_; s/(\W)/'%' . unpack('H2', $1)/eg; s/\s/+/g; $_; } #------------------------------------------------- # REFチェック #------------------------------------------------- sub refCheck { local($ref) = $ENV{'HTTP_REFERER'}; $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $baseUrl =~ s/(\W)/\\$1/g; if ($ref && $ref !~ /$baseUrl/i) { &error("不正なアクセスです"); } } #------------------------------------------------- # 移動ボタン #------------------------------------------------- sub mvbtn { local($link, $i, $view, $last) = @_; print "\n"; local($x,$y,$z,$f) = (1,0,0,0); while ($i > 0) { $f=0; print "\n"; print ""; } else { print "$x"; } unless ($x % $last) { $z++; $f++; print ""; } $x++; $y += $view; $i -= $view; } if ($z == 1) { print "\n"; while ($x % $last) { print ""; $x++; } print ""; } elsif (!$f) { print "\n"; } print "
|"; if ($page == $y) { print "$x|
||
\n"; } #------------------------------------------------- # イメージ参照 #------------------------------------------------- sub image { local($i,$j,$stop); &header; print <

画像イメージ

EOM @ico1 = split(/\s+/, $ico1); @ico2 = split(/\s+/, $ico2); $i=0; $j=0; $stop = @ico1; foreach (0 .. $#ico1) { $i++; $j++; print ""; if ($j != $stop && $i >= 5) { print "\n"; $i=0; } elsif ($j == $stop) { if ($i == 0) { last; } while ($i < 5) { print ""; $i++; } } } print <
$ico2[$_]
"; print "\"$ico1[$_]\"


EOM exit; } #------------------------------------------------- # チェックモード #------------------------------------------------- sub check { &header; print <Check Mode
    EOM # ログパス 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 ($count_fig) { print "設定あり\n"; if (-e $cntfile) { print "
  • カウンタログファイルのパス:OK\n"; } else { print "
  • カウンタログファイルのパス:NG → $cntfile\n"; } } else { print "設定なし\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 "
  • 過去ログ:"; if ($pastkey == 0) { print "設定なし\n"; } else { print "設定あり\n"; # NOファイル if (-e $pastno) { print "
  • NOファイルパス:OK\n"; } else { print "
  • NOファイルのパス:NG → $pastno\n"; } if (-r $pastno && -w $pastno) { print "
  • NOファイルパーミッション:OK\n"; } else { print "
  • NOファイルパーミッション:NG → $pastno\n"; } # ディレクトリ if (-d $pastdir) { print "
  • 過去ログディレクトリパス:OK\n"; } else { print "
  • 過去ログディレクトリのパス:NG → $pastdir\n"; } if (-r $pastdir && -w $pastdir && -x $pastdir) { print "
  • 過去ログディレクトリパーミッション:OK\n"; } else { print "
  • 過去ログディレクトリパーミッション:NG → $pastdir\n"; } } print < EOM exit; } __END__