#!/usr/bin/perl #┌───────────────────────────────── #│ PETIT BOARD v5.6 (2005/11/20) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'PETIT BOARD v5.6'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #│ 3. 添付の home.gif は L.O.V.E の mayuRin さんによる画像です。 #└───────────────────────────────── # # 【ファイル構成例】 # # public_html (ホームディレクトリ) # | # +-- petit / petit.cgi [705] # | petit.log [606] # | count.dat [606] # | jcode.pl [604] # | pastno.dat[606] # | home.gif # | # +-- lock [707] / # | # +-- past [707] / 1.dat [606] ... #============# # 設定項目 # #============# # 文字コードライブラリ取込 require './jcode.pl'; # タイトル名を指定 $title = "生物・化学部 掲示板"; # タイトルの色 $t_color = "#008080"; # タイトル文字のサイズ $t_size = '24px'; # タイトル文字のフォントタイプ $t_face = "MS Pゴシック"; # 本文の文字サイズ $b_size = '13px'; # 壁紙を指定する場合(http://から指定) $backgif = ""; # 背景色を指定 $bgcolor = "#E1F0F0"; # 文字色を指定 $text = "#000000"; # リンク色を指定 $link = "#0000FF"; # 未訪問 $vlink = "#800080"; # 訪問済 $alink = "#FF0000"; # 訪問中 # 戻り先のURL (index.htmlなど) $homepage = "http://tbcc.todo.ne.jp/index.html"; # 最大記事数 $max = 100; # 管理者用マスタパスワード (英数字で8文字以内) $pass = 'Gala67xy'; # 返信がつくと親記事をトップへ移動 (0=no 1=yes) $topsort = 1; # 返信フォーム複数行化 (0=no 1=yes) $res_forms = 0; # タイトルにGIF画像を使用する時 (http://から記述) $title_gif = ""; $tg_w = 150; # GIF画像の幅 (ピクセル) $tg_h = 50; # 〃 高さ (ピクセル) # ファイルロック形式 # → 0=no 1=symlink関数 2=mkdir関数 $lockkey = 0; # ロックファイル名 $lockfile = './lock/petit.lock'; # ミニカウンタの設置 # --> 0=no 1=テキスト 2=GIF画像 $counter = 1; # ミニカウンタの桁数 $mini_fig = 6; # テキストのとき:ミニカウンタの色 $cnt_color = "#DD0000"; # GIFのとき:画像までのディレクトリ # → 最後は必ず / で閉じる $gif_path = "./img/"; $mini_w = 8; # 画像の横サイズ $mini_h = 12; # 画像の縦サイズ # カウンタファイル $cntfile = './count.dat'; # スクリプトのファイルURL $script = './petit.cgi'; # ログファイルを指定 # --> フルパスで指定する場合は / から記述 $logfile = './petitlog.cgi'; # 記事 [タイトル] 部の長さ (全角文字換算) $sub_len = 14; # 記事の [タイトル] 部の色 $sub_color = "#006400"; # 記事表示部の下地の色 $tbl_color = "#FFFFFF"; # 家アイコンの使用 (0=no 1=yes) $home_icon = 1; $home_gif = "./home.gif"; # 家アイコンのファイル名 $home_wid = 16; # 画像の横サイズ $home_hei = 20; # 〃 縦サイズ # 記事の更新は method=POST 限定 (0=no 1=yes) # --> セキュリティ対策 $postonly = 1; # 同一IPアドレスからの連続投稿時間(秒数) # --> 連続投稿などの荒らし対策 # --> 値を 0 にするとこの機能は無効になります $wait = 60; # 1ページ当たりの記事表示数 (親記事) $p_log = 10; # 投稿があるとメール通知する (sendmail必須) # 0 : 通知しない # 1 : 通知するが、自分の投稿記事はメールしない。 # 2 : 通知する。自分の投稿記事も通知する。 $mailing = 0; # メールアドレス(メール通知する時) $mailto = 'xxx@xxx.xxx'; # sendmailパス(メール通知する時) $sendmail = '/usr/lib/sendmail'; # 他サイトから投稿排除時に指定 (http://から書く) $base_url = ""; # 文字色の設定。 @color1 = ('800000','DF0000','008040','0000FF','C100C1','FF80C0','FF8040','000080'); @color2 = ('茶','赤','みどり','青','紫','ピンク','オレンジ','あい色'); # URLの自動リンク (0=no 1=yes) $autolink = 1; # タグ広告挿入オプション # → の代わりに「広告タグ」を挿入する。 # → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。 $banner1 = ''; # 掲示板上部に挿入 $banner2 = ''; # 掲示板下部に挿入 # 投稿後の処理 # → 掲示板自身のURLを記述しておくと、投稿後リロードします # → ブラウザを再読み込みしても二重投稿されない措置。 # → Locationヘッダの使用可能なサーバのみ $location = ''; # ホスト取得方法 # 0 : gethostbyaddr関数を使わない # 1 : gethostbyaddr関数を使う $gethostbyaddr = 0; # アクセス制限(半角スペースで区切る、アスタリスク可) # → 拒否ホスト名を記述(後方一致)【例】*.anonymizer.com $deny_host = ''; # → 拒否IPアドレスを記述(前方一致)【例】210.12.345.* $deny_addr = ''; # 1回当りの最大投稿サイズ (bytes) $maxData = 51200; #---(以下は「過去ログ」機能を使用する場合の設定です)---# # # 過去ログ生成 (0=no 1=yes) $pastkey = 0; # 過去ログ用NOファイル $nofile = './pastno.dat'; # 過去ログのディレクトリ # → フルパスなら / から記述(http://からではない) # → 最後は必ず / で閉じる $pastdir = './past/'; # 過去ログ1ファイルの行数 # → この行数を超えると次ページを自動生成します $log_line = 600; #============# # 設定完了 # #============# # メイン処理 &decode; &axscheck; if ($mode eq "howto") { &howto; } elsif ($mode eq "find") { &find; } elsif ($mode eq "usr_del") { &usr_del; } elsif ($mode eq "regist") { ®ist; } elsif ($mode eq "admin") { &admin; } elsif ($mode eq "image") { ℑ } elsif ($mode eq "past") { &past; } elsif ($mode eq "check") { ✓ } &html_log; #--------------------------------------- # アクセス制限 #--------------------------------------- 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); } # IPチェック local($flg); foreach ( split(/\s+/, $deny_addr) ) { s/\./\\\./g; s/\*/\.\*/g; if ($addr =~ /^$_/i) { $flg = 1; last; } } if ($flg) { &error("アクセスを許可されていません"); # ホストチェック } elsif ($host) { foreach ( split(/\s+/, $deny_host) ) { s/\./\\\./g; s/\*/\.\*/g; if ($host =~ /$_$/i) { $flg = 1; last; } } if ($flg) { &error("アクセスを許可されていません"); } } if ($host eq "") { $host = $addr; } } #--------------# # 記事表示部 # #--------------# sub html_log { # クッキーを取得 local($cnam,$ceml,$curl,$cpwd,$ccol) = &get_cookie; # ヘッダを出力 &header; # カウンタ処理 if ($counter) { &counter; } # タイトル部 print "
\n"; }
if ($title_gif eq '') {
print "$title\n";
} else {
print "\n";
}
print "
\n"; print "
| \n";
$flag=1;
}
if ($reno && !$res_flag) {
print " \n"; $res_flag=1; } elsif (!$reno && $res_flag) { $res_flag=0; } if (!$reno) { $res_num = $no; print "$sub "; print "投稿者:$name 投稿日:$date "; print "No\.$no"; print " $url \n"; print " $comment\n"; } else { print "$name > $comment ($date) No\.$no \n"; } } close(IN); if ($rf_flag) { print " |
\n"; print "
\n"; if ($back >= 0) { print " \n"; } if ($next < $i) { print " \n"; } print "
\n"; print "
\n"; print "- PetitBoard -\n"; print "