#!/usr/local/bin/perl #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #+++  [ えれべぇ〜たぁ〜 Ver0.595 ] 2001.06.10 UPDATE! #+++ #+++ ・・・・・>>> All Created by Tacky #+++ #+++ ・・・・・>>> Copyright (c) 2000.09 Tacky's Room. All rights reserved.... #+++ #+++ Email >>> tacky2@ops.dti.ne.jp #+++ Homepage >>> http://tackysroom.com/ #+++ #+++ 設置方法構成(具体例) #+++ #+++ public_html(ホームページディレクトリ) #+++ | #+++ |-- cgi-bin(任意のディレクトリ) #+++ | #+++ |-- jcode.pl (755)…(日本語ライブラリ) #+++ |-- updown.cgi (755)…(スクリプト本体) #+++ |-- updown.txt (666)…(ログファイル)…空のままアップロード #+++ |-- updown_cnt (666)…(昇進状態設定用ファイル)…空のままアップロード #+++   ■( )内はパーミッッションの値です。 #+++   ■gif以外はアスキーモード、gifはバイナリーモードでアップロードして下さい。 #+++   ■updown.lockは自動作成&削除しますので、各自でご用意する必要はありません。 #+++   ■ログファイル・ロックファイルの指定はフルパス(http://〜)で指定するとエラーになりますのでご注意下さい。 #+++   ■設置時にエラーになる方は、$scriptの指定をhttpからのフルパス(http://〜)で指定してみて下さい。 #+++ #+++ >>> Update-History... #+++ #+++ 2001.06.10(Ver0.595) >> ・Ver594でバグ有り。削除時にmpポイントが0になるバグがありました。ごめんなさいぃ。 #+++ 2001.06.05(Ver0.594) >> ・ポイントがマイナスになるべき状態(updown.cnt上では0)で削除をすると、ポイントが逆に増える不具合を修正 #+++ >> ・昇進状態から除く設定項目を$kanrinameだったのを$kanrininに変更 #+++ 2001.04.27(Ver0.593) >> ・ちょっと修正。※既にお使いの方は特に最新にする必要無いと思います。 #+++ 2001.03.21(Ver0.592) >> ・ の記述ミス。以前も修正したんですが元に戻しちゃってました。m(_ _)m #+++ 2001.03.13(Ver0.591) >> ・『泥棒機能』で『●●の一撃』となった場合「MPポイント」がクリアされてしまうバグ修正。 #+++ ・「トクトク」クッキー対応 #+++ 2001.03.09(Ver0.59) >> ・レス投稿時に親記事投稿者のポイントを減少させる『泥棒機能』は、レス時に『会心の一撃』となった場合「だけ」に変更しました。 #+++ 2001.03.05(Ver0.581) >> ・Ver0.58において、ポイント減少しすぎてポイントがマイナスはあり得ない仕様だがマイナスになっていました。 #+++ 2001.02.24(Ver0.58) >> ・『泥棒機能』追加。レス時に親記事投稿者のポイントを減少(泥棒)させます! #+++ ※痛恨の一撃があった場合は、逆にポイントを与えてしまいまっせ〜 #+++ ※親記事のポイントを減少させてもログ部分には反映しません(重くなるのであえてそうした) #+++ ので自分の最新のポイントは『昇進状態』で確認するようにしてね。 #+++ ・記事削除時にポイントも一緒に減算するようにしました。 #+++ 2001.01.23(Ver0.57) >> ・昇進状態から管理人を除く設定を追加しました。$kanrinameって所で指定するのだよ〜 #+++ ・Sendmailを追加 #+++ ・Locationヘッダが使えないサーバー対応 $damedameって所で指定するのだよ〜 #+++ 2000.10.03 >> ・管理者アイコンの設定を行わない場合、パスワード未入力時にアイコンが×で表示されているバグを修正 #+++ 2000.09.26 >> ・フレーム無しの場合、カラーサンプルが表示されませんでした。 #+++ ・同スクリプトに過去ログ作成機能は無いのに、「過去ログ作成」の文字が入っちゃってました。(^^ゞ #+++ ・昇進に合わせてアイコンを変更する場合でも、管理人は管理人アイコンを表示するように修正 #+++ ・レス機能を使わない設定を可能にしました。 #+++ 2000.09.25 >> ・色選択をしない場合でも、カラーサンプルが表示される場合があったのを修正。※この修正ではバージョンはあげていません #+++ 2000.09.24 >> ・カラーサンプルをご用意しました。&修正機能が無いのにパスワード項目の所に「修正・削除」の文字が入っておりました。 #+++ ・管理人用アイコンはパスワードで判別、今までの管理人用アイコンは常連者用アイコンの設定に変わります。 #+++ 2000.09.22 >> ・親記事の現在の獲得ポイントがカンマ編集されていなかった・親記事の獲得ポイント表示位置を変更 #+++ 2000.09.19 >> ・ネスケで閲覧した場合、レス記事が黒くおっかしくなっていました。 #+++ ・フレーム無しの場合、NEXTボタンを押下したらエラーになった #+++ ・フレーム無しの場合、レス投稿時の文字色が反映していませんでした #+++ 2000.09.09 >> ・昇進状態がぐちゃぐちゃに表示されてしまいました。  #+++ ・入力フォームに「タイトルを不要」と設定してもタイトルが表示されていました。  #+++ ・ポイント表示時に3桁毎にカンマを挿入し表示出来るようにしました。 #+++ ・フレーム無しの設定を可能にしました。 #+++ ・ポイントがマイナスの場合、「-(マイナス)」を表示しないように設定可能にしました。 #+++ #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #━<初期設定開始>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ require './jcode.pl'; #日本語コード変換 $url = 'http://tackysroom.com'; #戻り先URL $script = './updown.cgi'; #このCGIの名前を指定 $logfile = './updown.txt'; #ログファイルの名前を指定  http://〜で指定してはダメですよ $title = '+-- えれべぇ〜たぁ〜♪ --+'; #タイトルを指定 $titlelogo = './updown.gif'; #タイトル画像を指定 $tbgcolor = '#cccc00'; #入力フォームの背景色を指定(透明にしたい場合は'') $backpicture1 = ''; #フレーム(入力フォーム側)背景画像を指定(使用しない場合は、''で良い) $bgcolor1 = '#ff9900'; #フレーム(入力フォーム側)背景色を指定 $backpicture2 = ''; #フレーム(ログ表示部側)背景画像を指定(使用しない場合は、''で良い) $bgcolor2 = '#ffcc00'; #フレーム(ログ表示部側)背景色を指定 $tcolor = "#333333"; # 文字色 $linkcolor = "#cc6600"; # リンク色(未読リンク) $vlinkcolor = "#990000"; # リンク色(既読リンク) $alinkcolor = "#ff3300"; # リンク色(押した時) $hovercolor = '#ff0000'; #リンクをポイントした際のアンダーライン色(IEのみ) i000331 $pt = '10pt'; #全体のフォントサイズ(pt指定以外何があるのか、僕知らない。(^^ゞ) #i000331 #■昇進機能を使わない方は、$logfile2 = '';として下さい。 $logfile2 = "./updown.cnt"; #<<<メッセージを登録してくれた方の登録回数累計を保持するファイル $lockfile = './updown.lock'; #ロックファイルの名前を指定(自分で作る必要無し)  http://〜で指定してはダメですよ $inifile = "./updown_2.ini"; #<<<HP・MPの初期設定ファイル #■昇進名称の設定 @pointget_nm = ("幼稚園生","小学校低学年","小学校中学年","小学校高学年","中学生","高校生","大学生","大学院生","平社員","課長","部長","社長","神様") ; $point_color1 = '#ffffff'; #現在のポイント(HP・MP)文字色 $point_color2 = '#990000'; #ポイント取得した際のメッセージ文字色 $point_disp = 400 ; #ポイント上位何人までを『昇進状態の表示』で表示しますか? #▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ ポイント管理個数が1の場合の設定 ▽▽管理個数が2の場合は、この行から「ポイント管理個数が1の場合の設定は「ここまで」」までを削除▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ #■ポイント管理個数。HP&MP等のポイントを使う場合は2。単なる1個のポイントしか使わない場合(nnポイントアップ!とかね)は1を設定。 $pointflg = 1 ; #ポイント管理個数。1個だったら1、2個だったら2。1か2ね。 #■「現在のポイント(nnn)」と表示する場合の表示形式 #*1にポイントを管理している1つ目の値が表示されます。*2には2つ目の値です。※「現在の」は必ず残しておいて下さい。おねがい。(^^ゞ #$point_disp = "現在のポイント(HP:*1、MP:*2)"; $point_disp2 = "現在の持ち金(*1円)"; #■昇進条件の設定======================================================================================================================================= #※設定値1番目は必ず0にしておいて下さい。 @pointget_1 = (0,7000,10000,20000,50000,150000,500000,5000000,100000000) ; #<<<HP昇進条件 @pointget_2 = (0,50,100,120,150,250,400,600,1000,1500,2500,4000,8000) ; #<<<MP昇進条件。$pointflg = 1の場合は修正不要というか使いません。 #■ランダム攻撃(快心・痛恨の一撃)の設定================================================================================================================================ $down = 4 ; #ランダムにポイントを減少させます。数値が小さい程、減少させる回数が増えます。 #減少させたくない場合は0を設定して下さい。設定値は1〜10か15です。 @pointget_hp = (10000,12000,8000,40000,10500,21000,50000,13000,80000) ; #ランダム攻撃HP(ランダムに設定値をHPから減少させます) @pointget_mp = (10,28,35,47,0,11,20,70,60,14,20,0,49) ; #ランダム攻撃MP(ランダムに設定値をMPから減少させます)$pointflg = 1の場合は修正不要というか使いません。 #↑上記の設定の場合、仮にランダム値が"1"となった(スクリプト内で算出します)場合,@pointget_hpの一番左を0として数えると #0番目:7,1番目:13となり、「HPが"13"減少、それに対応したMP,"8"を減少」させます。$down = 0 ;の場合は、特に修正の必要はありません。 #■上記の設定値だけど、「快心・痛恨」っちゅーくらいだから、大きな数値を設定した方が投稿者がびっくりして良いでしょう。(笑) #■昇進文章設定(タグ埋め込みオッケーです。) $point_word1 = '円'; #ポイント1個目の文字 $point_word2 = ''; #ポイント2個目の文字 $point_word3 = 'もらった!!'; #ポイントが増加した時の文字 $point_word4 = 'を使い込んでしまった・・・'; #ポイントが減少した時の文字 $point_word5 = '臨時収入!!'; #ランダムにポイント増加した時に表示するメッセージ $point_word6 = '泥棒に入られた!'; #ランダムにポイント減少した時に表示するメッセージ $sign = 0 ; #ポイントが減少した場合、「-(マイナス)」を表示しますか? (0:no 1:yes) $kanma = 1 ; #ポイントをカンマ編集(1,234のように)しますか?(0:no 1:yes) #△△△△△△△△△△△△△△△ ポイント管理個数が1の場合の設定は「ここまで」△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△ #▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ ポイント管理個数が2の場合の設定 ▽▽管理個数が1の場合は、この行から「ポイント管理個数が2の場合の設定は「ここまで」」までを削除▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ #■ポイント管理個数。HP&MP等のポイントを使う場合は2。単なる1個のポイントしか使わない場合(nnポイントアップ!とかね)は1を設定。 $pointflg = 2 ; #ポイント管理個数。1個だったら1、2個だったら2。1か2ね。 #■「現在のポイント(nnn)」と表示する場合の表示形式 #*1にポイントを管理している1つ目の値が表示されます。*2には2つ目の値です。※「現在の」は必ず残しておいて下さい。おねがい。(^^ゞ #ポイント管理が1個の場合はこんな感じで→$point_disp = "現在の持ち金(*1円)"; $point_disp2 = "現在のポイント(HP:*1、MP:*2)"; #■昇進条件の設定======================================================================================================================================= #※設定値1番目は必ず0にしておいて下さい。 @pointget_1 = (0,80,120,150,200,300,500,800,1300,2000,3000,5000,10000) ; #<<<HP昇進条件  @pointget_2 = (0,50,100,120,150,250,400,600,1000,1500,2500,4000,8000) ; #<<<MP昇進条件。$pointflg = 1の場合は修正不要というか使いません。 #■ランダム攻撃(快心・痛恨の一撃)の設定================================================================================================================================ $down = 10 ; #ランダムにポイントを減少させます。数値が小さい程、減少させる回数が増えます。 #減少させたくない場合は0を設定して下さい。設定値は1〜10か15です。 @pointget_hp = (70,13,0,25,30,27,0,13,0,54,85,50,100) ; #ランダム攻撃HP(ランダムに設定値をHPから減少させます) @pointget_mp = (10,28,35,47,0,11,20,70,60,14,20,80,49) ; #ランダム攻撃MP(ランダムに設定値をMPから減少させます)$pointflg = 1の場合は修正不要というか使いません。 #↑上記の設定の場合、仮にランダム値が"1"となった(スクリプト内で算出します)場合,@pointget_hpの一番左を0として数えると #0番目:7,1番目:13となり、「HPが"13"減少、それに対応したMP,"8"を減少」させます。$down = 0 ;の場合は、特に修正の必要はありません。 #■上記の設定値だけど、「快心・痛恨」っちゅーくらいだから、大きな数値を設定した方が投稿者がびっくりして良いでしょう。(笑) #■昇進文章設定(タグ埋め込みオッケーです。) $point_word1 = 'HP'; #ポイント1個目の文字 $point_word2 = 'MP'; #ポイント2個目の文字 $point_word3 = 'を手に入れたー!!!'; #ポイントが増加した時の文字 $point_word4 = 'のダメージを受けちまったぁ!'; #ポイントが減少した時の文字 $point_word5 = '会心の一撃!!!'; #ランダムにポイント増加した時に表示するメッセージ $point_word6 = '痛恨の一撃!!!'; #ランダムにポイント減少した時に表示するメッセージ $sign = 1 ; #ポイントが減少した場合、「-(マイナス)」を表示しますか? (0:no 1:yes) $kanma = 0 ; #ポイントをカンマ編集(1,234のように)しますか?(0:no 1:yes) #△△△△△△△△△△△△△△△ ポイント管理個数が2の場合の設定は「ここまで」△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△ $framesize = '55%' ; #左フレームサイズ $framepos = 0 ; #0:フレーム無し 1:入力フォームを右、ログ表示部を左フレーム。 2:入力フォームを左、ログ表示部を右フレーム。 $ressw = 1 ; #レス機能を使いますか?(0:no 1:yes) #メッセージ表示部分にある「返信」に画像を使う場合、画像ファイル名を指定。画像を使わない場合は、以下を''として下さい。 $res_gif = './res.gif'; $name_color = "#ffffcc"; #投稿メッセージ表示部分の「名前」の色 $msg_color = "#ffffcc"; #投稿メッセージ表示部分の「メッセージ」の背景色 $homelinklogo = './kakikomitai_linkhome.gif'; #ホームページ・リンク画像を指定(未使用の場合は'') $maillinklogo = './kakikomitai_linkmail.gif'; #メール・リンク画像を指定(未使用の場合は'') $datamax = 70 ; #最大データ保存件数(親記事) $pagemax = 15 ; #1ページ内に表示する件数(親記事の件数) $password = 'pass'; #メンテナンス用パスワード(管理者用) $tag = 'yes'; #タグ許可(yes,no) $resflag = 'yes' ; #最新レスを先頭に表示する?(yes,no) $hostflag = 'no' ; #リモートホストを表示する?(yes.no) $next_word = 'NEXT'; #次画面表示ボタンに表示する文字 $back_word = 'BACK'; #前画面表示ボタンに表示する文字 $row = 4 ; #入力フォーム・メッセージ欄の行数 $col = 40; #入力フォーム・メッセージ欄の文字数 $t_width = '70%' ; #メッセージ表示欄のテーブル横幅(width)。pixelで指定 $titleset = 1; #入力フォームに「タイトル」必要?(0:不要 1:必要) #色の指定(背景色) @COLORS_B = ('#EE7600','#99cc33','#ff9900','#99cccc','#ff6666','#666666','#999900','#ff9999','#cc99cc','#990000'); @COLORS_BNM = ('DarkOrange','Green','Orange','Blue','Red','Gray','Gold','Pink','Purple','Brown'); #↑みたいに、背景色は選択しないという(1色でいい)方はチェック(1) $colb_use = 0; #(0:色指定する 1:色指定しない) $colb = '#cc6600' ; #上記が'1'の場合、背景色を指定 #色の指定(文字色) @COLORS_F = ('#EE7600','#99cc33','#ff9900','#99cccc','#ff6666','#666666','#999900','#ff9999','#cc99cc','#990000'); @COLORS_FNM = ('DarkOrange','Green','Orange','Blue','Red','Gray','Gold','Pink','Purple','Brown'); #↑みたいに、文字色は選択しないという(1色でいい)方はチェック(1) $colf_use = 0; #(0:色指定する 1:色指定しない) $colf = '#000000' ; #上記が'1'の場合、文字色を指定 $icon_use = 'yes'; #アイコンを使用しますか?(yes,no) #昇進機能を使う場合、昇進状態に従ってアイコンを変えますか? #この場合、投稿時にはアイコンの選択は出来ません。 #又、昇進状態の個数とアイコンの個数は同じにしておいて下さい。 #ex. # $icon_gif[0] = 'xx1.gif'; # $icon_gif[1] = 'xx2.gif'; # $icon_gif[2] = 'xx3.gif'; # @pointget_nm = ("幼稚園生","小学校低学年","小学校中学年"); ※画像も3個、昇進状態も3個ですよね?このようにして下さい。 $icon_rank = 0 ; #0:昇進とは別にアイコンを使う(投稿時にアイコン選択) 1:昇進に合わせてアイコンを表示 #↓管理者用アイコンとパスワードを指定。管理人は1つしかアイコン登録出来ません。 # $oiconpassに指定したパスワードで投稿した場合、$oicon_gifのアイコンが表示されるようになってます。 #管理者アイコンは特に必要無い場合は、$oiconpass = '';として下さい。 $oicon_gif = './kuma.gif' ; $oiconpass = '1234'; $oicon_gif_w = 32 ; $oicon_gif_h = 32 ; #↓常連者用アイコンと投稿時の名前を指定。$jicon_gif[2]...[5]のように適当に増やして下さいね。 # $jiconnmに指定した名前で投稿した場合、$jicon_gifのアイコンが表示されるようになってます。 $jicon_gif[0] = './kuma.gif' ; $jiconnm[0] = 'Aさん' ; $jicon_gif_w[0] = 32 ; $jicon_gif_h[0] = 32 ; $jicon_gif[1] = './parappa.gif' ; $jiconnm[1] = 'Bさん'; $jicon_gif_w[1] = 32 ; $jicon_gif_h[1] = 32 ; #訪問者用アイコンとアイコンの名前の指定。$icon_gif[3]...[10]のように適当に増やして下さいね。 #その下は、画像サイズ。_wは幅。_hは高さです。わからない場合は_wの方だけ0にしておいてね。 $icon_gif[0] = './ball.gif' ; $iconnm[0] = 'ボール' ; $icon_gif_w[0] = 32 ; $icon_gif_h[0] = 32 ; $icon_gif[1] = './corgi.gif' ; $iconnm[1] = 'コーギー' ; $icon_gif_w[1] = 32 ; $icon_gif_h[1] = 32 ; $icon_gif[2] = './cow.gif' ; $iconnm[2] = 'うし' ; $icon_gif_w[2] = 32 ; $icon_gif_h[2] = 32 ; $icon_gif[3] = './denchi.gif' ; $iconnm[3] = '電池' ; $icon_gif_w[3] = 32 ; $icon_gif_h[3] = 32 ; $icon_gif[4] = './dorayaki.gif' ; $iconnm[4] = 'ドラ焼き' ; $icon_gif_w[4] = 32 ; $icon_gif_h[4] = 32 ; $icon_gif[5] = './duck.gif' ; $iconnm[5] = 'あひる' ; $icon_gif_w[5] = 32 ; $icon_gif_h[5] = 32 ; $icon_gif[6] = './h_bambi.gif' ; $iconnm[6] = 'バンビ' ; $icon_gif_w[6] = 32 ; $icon_gif_h[6] = 32 ; $icon_gif[7] = './h_bear.gif' ; $iconnm[7] = 'くま' ; $icon_gif_w[7] = 32 ; $icon_gif_h[7] = 32 ; $icon_gif[8] = './h_kaeru.gif' ; $iconnm[8] = 'かえる' ; $icon_gif_w[8] = 32 ; $icon_gif_h[8] = 32 ; $icon_gif[9] = './h_momo.gif' ; $iconnm[9] = 'モモ' ; $icon_gif_w[9] = 32 ; $icon_gif_h[9] = 32 ; $icon_gif[10] = './h_saru.gif' ; $iconnm[10] = 'さる1号' ; $icon_gif_w[10] = 32 ; $icon_gif_h[10] = 32 ; $icon_gif[11] = './h_usagi.gif' ; $iconnm[11] = 'うさ1号' ; $icon_gif_w[11] = 32 ; $icon_gif_h[11] = 32 ; $icon_gif[12] = './kappa.gif' ; $iconnm[12] = 'かっぱ' ; $icon_gif_w[12] = 32 ; $icon_gif_h[12] = 32 ; $icon_gif[13] = './mail.gif' ; $iconnm[13] = 'メール' ; $icon_gif_w[13] = 32 ; $icon_gif_h[13] = 32 ; $icon_gif[14] = './monkey1.gif' ; $iconnm[14] = 'さる2号' ; $icon_gif_w[14] = 32 ; $icon_gif_h[14] = 32 ; $icon_gif[15] = './nachan.gif' ; $iconnm[15] = 'なっちゃん' ; $icon_gif_w[15] = 32 ; $icon_gif_h[15] = 32 ; $icon_gif[16] = './oyaji.gif' ; $iconnm[16] = 'オヤジ' ; $icon_gif_w[16] = 32 ; $icon_gif_h[16] = 32 ; $icon_gif[17] = './panda.gif' ; $iconnm[17] = 'パンダ' ; $icon_gif_w[17] = 32 ; $icon_gif_h[17] = 32 ; $icon_gif[18] = './poch.gif' ; $iconnm[18] = 'ポチ' ; $icon_gif_w[18] = 32 ; $icon_gif_h[18] = 32 ; $icon_gif[19] = './risu.gif' ; $iconnm[19] = 'りす' ; $icon_gif_w[19] = 32 ; $icon_gif_h[19] = 32 ; $icon_gif[20] = './ebi.gif' ; $iconnm[20] = '海老' ; $icon_gif_w[20] = 32 ; $icon_gif_h[20] = 32 ; $icon_gif[21] = './tamago.gif' ; $iconnm[21] = '玉子' ; $icon_gif_w[21] = 32 ; $icon_gif_h[21] = 32 ; $icon_gif[22] = './takoyaki.gif' ; $iconnm[22] = 'たこ焼き' ; $icon_gif_w[22] = 32 ; $icon_gif_h[22] = 32 ; $icon_gif[23] = './tulip.gif' ; $iconnm[23] = 'チューリップ' ; $icon_gif_w[23] = 32 ; $icon_gif_h[23] = 32 ; $icon_gif[24] = './usa2.gif' ; $iconnm[24] = 'うさ2号' ; $icon_gif_w[24] = 32 ; $icon_gif_h[24] = 32 ; $icon_gif[25] = './volley.gif' ; $iconnm[25] = 'バレーボール' ; $icon_gif_w[25] = 32 ; $icon_gif_h[25] = 32 ; #アイコン一覧を表示する際、1行にアイコンを何個表示します? $icon_line = 5 ; #←の場合、3個表示したら改行するって事です。 $method = 'POST'; #METHODの指定(POST又はGET) $renchan = 7 ; #連続親記事(レスは除く)投稿可能回数を設定。設定しない場合は0 #掲示板荒らし対策。排除したいプロバのアドレスを設定して下さい。 # "xxx?.com"とした場合、"xxx1.com","xxx2.com"等、「?」の部分が文字列1つと判断します # "xxx*.com"とした場合、"xxx1.com","xxx12345.com等、「*」の部分が0個以上の文字列と判断します。 @DANGER_LIST=("xxx.com","yyy.com","zzz*.or.jp"); #掲示板荒らし対策その2。メッセージ最大文字数を指定。特に設定しない場合は、''として下さい。 $maxword = '1000' ; #1000=日本語で500文字という意味です。 #投稿時のパスワードをcrypt関数を使用する(暗号化) #crypt関数が利用出来ない場合もありますので、投稿時にエラーになる場合は、「0:使用しない」にして下さいね。 $ango = 1 ; #0:使用しない 1:使用する (推奨:1:使用する) #============================================================================================================================================================================================= #フォームCSS設定 ※使用しない場合は、$css_style = "";とし、そこから2行(先頭がEOMの行までを)を削除して下さい。 $css_style = <<"EOM"; STYLE="font-size:$pt;color:#333333;border:1 solid #000066;" onFocus="this.style.backgroundColor='#ffffcc'" onBlur="this.style.backgroundColor='#FFFFFF'" EOM #============================================================================================================================================================================================= #【新規投稿時】入力フォームの上部にコメントを表示します。表示させない場合は、以下3行(先頭がEOMの行までを)を削除して下さい。 $HEAD_COMMENT = <<"EOM"; ※メッセージに書き込んだ単語によってあなたのポイントが上下します。
たくさん書いた方がポイントはアップします! 返信を行う場合は、返信したい投稿部分にある返信ボタンを押下して下さい
EOM #============================================================================================================================================================================================= #【レス投稿時】入力フォームの上部にコメントを表示します。表示させない場合は、以下3行(先頭がEOMの行までを)を削除して下さい。 $HEAD_COMMENT2 = <<"EOM"; この画面は「レス投稿画面」です。新規投稿画面に戻る場合はここを押して下さい。 EOM #============================================================================================================================================================================================= #「使い方」に表示する説明文。以下の"EOM"〜EOMの間を修正して下さい。 $howto = <<"EOM";
EOM #■■■ Ver0.57(2001.01.23)より追加↓ ■■■ #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Sendmailが使える方のみ以下の項目を設定して下さい。 # ※Sendmailとは? #   メールソフトを立ち上げないで、指定した相手にメールを送る事が出来る機能です。 #   自分のプロバイダーがSendmailに対応しているか、パスはどこ?等は、各自のプロバイダー #   のHPでご確認して下さいね。 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #投稿時に管理者にメール送信する場合、sendmailのパスを指定 $sendmail = ""; #メール送信先アドレス。(管理者のアドレス)…「@」の前には必ず「¥」を付けてね。 $smail_address = "xxxx\@xxx.xx.jp"; $hiho = 0 ; #プロバイダーが「hi-ho」の人のみ「1」にして下さい。 ※Sendmail使う場合 $kanrinin = 'xxxxxxxxxx' ; #ここで指定した名前で投稿した人(普通は管理人だね)は昇進状態から除きます。u010605 #▼「フレーム無しで使う場合」:Locationヘッダが使えないサーバーは1。通常は0でいいはず。※トクトク、3nopage,WinNTサーバー等が1かな。 $damedame = 0 ; #▼レス記事を投稿した際に、親記事投稿者のポイントを減少させる「泥棒機能」搭載しますか?(0:no 1:yes) # ※レス投稿時:「会心の一撃の場合は親記事の投稿者のポイントが減少します」・「痛恨の一撃の場合は親記事投稿者のポイントが増加します」 $dorobo = 1 ; #※上記で設定する$downが0以外の場合のみの機能です。 @kanriname = ('Tacky','',''); #ここに指定した名前で投稿した場合は、泥棒対象外とします。管理人が嫌われない為に。(笑) #<<< ここから下はいじらない方がいいです。 @errtag = ('table','meta','form','!--','embed','html','body','tr','td','th','a'); #デンジャラ〜なタグ #━<初期設定終了>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ utime time(), time(), __FILE__; # スクリプト生成日時の更新 ############################################################################### #### Main Process START ##################################################### ############################################################################### $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); #システム日時・時刻取得 $year = sprintf("%02d",$year + 1900); $month = sprintf("%02d",$mon + 1); $mday = sprintf("%02d",$mday); $hour = sprintf("%02d",$hour); $min = sprintf("%02d",$min); $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $today = "$month/$mday($week) $hour:$min"; if ($ENV{'HTTP_USER_AGENT'} !~ /MSIE/i) { $css_style = "" ; } #Netscape-CSS対応 &cookieget; #<<\n"; } elsif ( $FORM{'action'} eq "view" && $framepos != 0) { #<<<ログファイル更新(編集時) &view ; &footer ; #<<\n"; print "\n"; print "\n"; } else { if ( $framepos == 0 ) { &header(1) ; #<<\n"; print "\n"; print "$title\n"; print "\n"; if ( $framepos == 1 ) { print "\n"; print "\n"; } else { print "\n"; print "\n"; } print "\n"; print "\n"; print "<body><p>フレームに対応していませんので、申\し訳ありませんが使用出来ません。</p></body>\n"; print "\n"; print "\n"; } ###<-------------------------------------------------------------- ###<--- デコード&変数代入 ###<-------------------------------------------------------------- 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; if ($tag eq 'yes') { #危険なタグは禁止!!! foreach ( @errtag ) { if ($value =~ /<$_(.|\n)*>/i) { &error("使用出来ないタグが入力されています"); } } } else { $value =~ s//>/g; } $value =~ s/\,/,/g; &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } $FORM{'hp'} =~ s/^http\:\/\///; $FORM{'comment'} =~ s/\r\n/
/g; $FORM{'comment'} =~ s/\r|\n/
/g; } ###<-------------------------------------------------------------- ###<--- 入力フォーム ###<-------------------------------------------------------------- sub forminput { if ( $framepos == 0 ) { print "
\n"; if ( $titlelogo ) { print "

\n"; } else { print "$title

\n"; } print $HEAD_COMMENT if ( $FORM{'action'} ne 'res' ) ; print $HEAD_COMMENT2 if ( $FORM{'action'} eq 'res' ) ; print "
\n"; } else { print $HEAD_COMMENT if ( $FORM{'action'} ne 'res' ) ; print $HEAD_COMMENT2 if ( $FORM{'action'} eq 'res' ) ; } print "
\n"; $c_name = $COOKIE{'nm'} ; $c_email = $COOKIE{'em'} ; $c_hp = $COOKIE{'hp'} ; $c_color = $COOKIE{'cl'} ; $c_color_f = $COOKIE{'cl_f'} ; $c_icon = $COOKIE{'ic'} ; $c_pass = $COOKIE{'ps'} ; $c_title = '' ; $c_comment = '' ; if ( $framepos != 0 ) { $tgt = "target=view"; } else { $tgt = ""; } print "
\n"; print "\n"; if ( $tbgcolor ) { $bg="bgcolor=\"#660000\""; } else { $bg="";} #i000906 print "
\n"; #u000906 if ( $tbgcolor ) { $tbgcolor="bgcolor=\"$tbgcolor\""; } else { $tbgcolor="";} if ( $framepos != 0 ) { print "\n"; #名前 print "\n"; print "\n"; #メール print "\n"; print "\n"; #ホームページ print "\n"; print "\n"; #タイトル if ( $titleset == 1 ) { print "\n"; print "\n"; } #メッセージ print "\n"; print "\n"; #背景色 if ( $colb_use != 1 && $FORM{'action'} ne 'res' && $c_resno eq '') { print "\n"; print "\n"; } #文字色 if ( $colf_use != 1 ) { print "\n"; print "\n"; } #アイコン if ( $icon_rank == 0 && $icon_use eq 'yes') { print "\n"; print "\n"; } #パスワード print "\n"; print "\n"; print "\n"; } else { print "
 Name
 
 Email
 
 Homepage
 
 Title
 
 Message
  "; print "
 Backcolor
\n"; print " "; print "  カラーサンプル
 Forecolor
\n"; print " 
\n"; print " Icon
"; print " \n"; print "  アイコン一覧
 Password
   削除に使用
 \n"; if ( $FORM{'action'} ne 'res' && $c_resno eq '') { print "\n"; } else { print "\n"; print "\n"; } print "  
\n"; #名前 print "\n"; print "\n"; #メール print "\n"; print "\n"; #ホームページ print "\n"; print "\n"; #タイトル if ( $titleset == 1 ) { print "\n"; print "\n"; } #メッセージ print "\n"; print "\n"; #背景色 if ( $colb_use != 1 && $FORM{'action'} ne 'res' && $c_resno eq '') { print "\n"; print "\n"; } } #文字色 if ( $colf_use != 1 ) { if ( $FORM{'action'} eq 'res' ) { print "\n"; print "\n"; } #アイコン if ( $icon_rank == 0 && $icon_use eq 'yes') { print "\n"; print "\n"; } #パスワード print "\n"; print "\n"; print "\n"; } print "
Name 
Email 
Homepage 
Title 
Message  "; print "
Backcolor\n"; print " "; if ( $colf_use == 1 ) { print "  カラーサンプル
Textcolor\n"; } else { if ( $colb_use == 1 ) { print "
Textcolor"; } else { print " Textcolor\n"; } } print " "; print "  カラーサンプル\n"; print "
\n"; print "Icon"; print " \n"; print "  アイコン一覧
Password   削除に使用
 \n"; if ( $FORM{'action'} ne 'res' && $c_resno eq '') { print "\n"; } else { print "\n"; print "\n"; } print "  
\n"; } ###<-------------------------------------------------------------- ###<--- HTMLヘッダー書き出し ###<-------------------------------------------------------------- sub header { print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "$title\n"; #<<>> print "\n"; #<<>> print "\n"; if ( $_[0] == 1 ) { if ($backpicture1) { $set = "background=\"$backpicture1\""; if ( $bgcolor1 ) { $set .= " bgcolor=\"$bgcolor1\"" ; } } elsif ($bgcolor1 ) { $set = "bgcolor=\"$bgcolor1\""; } } else { if ($backpicture2) { $set = "background=\"$backpicture2\""; if ( $bgcolor2 ) { $set .= " bgcolor=\"$bgcolor2\"" ; } } elsif ($bgcolor2 ) { $set = "bgcolor=\"$bgcolor2\""; } } print "\n"; } ###<-------------------------------------------------------------- ###<--- ヘッダー上部書き出し ###<-------------------------------------------------------------- sub header2 { print "
\n"; print "\n"; print "
[HOME]\n"; if ( $logfile2 ne '' ) { print " [昇進資格説明]\n"; print "  [昇進状態]\n"; print "  [使い方]\n"; } print "
\n"; print "
\n"; } ###<-------------------------------------------------------------- ###<--- HTMLフッダー書き出し ###<-------------------------------------------------------------- sub footer { #<<< ↓消さないでネ♪ print "\n"; print "\n"; } ###<-------------------------------------------------------------- ###<--- ログファイル読み込み ###<-------------------------------------------------------------- sub dataread { #<<<ログ読み込み if ( !(open(IN,"$logfile"))) { &fileunlock ; &error("ログファイル($logfile)のオープンに失敗しました"); } @LOG = ; close(IN); @RESLOG = () ; @MAINLOG = () ; $MAXNO = ''; foreach ( @LOG ) { ($no,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$h,$m,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$_); if ( $FORM{'no'} && $FORM{'no'} == $no && $resno ) { $svresno = $resno ; } if ( $resno eq '' ) { push(@MAINLOG,$_) ; } else { push(@RESLOG,$_) ; } push(@SVLOG,"$_"); if ( $no >= $MAXNO ) { #最新の投稿Noを退避 $MAXNO = $no ; } } @RESLOG = reverse @RESLOG ; #レスログは古い順に。 } ###<-------------------------------------------------------------- ###<--- ログ表示 ###<-------------------------------------------------------------- sub view { &dataread ; #<<<ログ読み込み if ( $framepos != 0 ) { &header(2) ; #<<\n"; if ( $titlelogo ) { print "
\n"; } else { print "$title
\n"; } } else { print "
\n"; } if ( $icon_rank == 1 ) { print "
アイコン一覧\n"; } #表示対象ページの先頭データ件数を算出 $dm = @MAINLOG; if ( $dm % $pagemax == 0) { $p = $dm / $pagemax ; } else { $p = $dm / $pagemax + 1; } $p = sprintf("%3d",$p); if ( $FORM{'page'} eq $next_word ) { if ( $FORM{'disppage'} == 0 ) { $FORM{'disppage'} = 1 } ; $d = ($FORM{'disppage'} + 1) * $pagemax - $pagemax ; $FORM{'disppage'} = $FORM{'disppage'} + 1 ; } elsif ( $FORM{'page'} eq $back_word ) { $d = ($FORM{'disppage'} - 1) * $pagemax - $pagemax ; $FORM{'disppage'} = $FORM{'disppage'} - 1 ; } elsif ( $FORM{'disppage'} ne "" ) { $d = $FORM{'disppage'} * $pagemax - $pagemax ; } else { $d = 0 ; $FORM{'disppage'} = 1 ; } if ( $msg_color ) { $tbbg = "bgcolor=\"$msg_color\"" ; } else { $tbbg = "" ; } $z = 1 ; for ( $i = $d ; ( $z <= $pagemax ) && ( $i < $dm ); $i++ ) { ($no,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$h,$m,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$MAINLOG[$i]); if ( $FORM{'action'} ne 'res' || ($FORM{'action'} eq 'res' && $FORM{'no'} eq $no) ) { if ( $FORM{'action'} ne 'res' ) { if ( $framepos != 0 ) { $tgt = "target=input"; } else { $tgt = ""; } print "
"; print ""; print ""; print "\n"; } if ( $colf_use != 1 ) { $col_f = $COLORS_F[$color_f] ; #文字色 } else { $col_f = $colf ; #文字色 } if ( $colb_use != 1 ) { $color = $COLORS_B[$color] ; #背景色 } else { $color = $colb ; #背景色 } $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1こちら<\/a>/g; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; if ( $titleset == 1 ) { if ( !($ttl) ) { $ttl = "(無題)"; } print "■--$ttl
\n"; } print "++ $name   "; print ""; if ( $email ne '' ) { print ""; if ( $maillinklogo ) { print ""; } else { print "[MAIL]"; } print "\n"; } if ( $hp ne '' ) { print ""; if ( $homelinklogo ) { print ""; } else { print "[URL]"; } print "\n"; } if ( $ressw == 1 ) { if ( $FORM{'action'} ne 'res') { if ( $res_gif ) { print "   ---; \n"; } else { print "   \n"; } } } print ""; &pointset2 ; print "
\n"; print "
\n"; #アイコン表示 if ( $icon_use eq 'yes' ) { &icon_set($name) ; } else { print " "; } print "\n"; print "$comment\n"; $no = sprintf("%d",$no); print "
"; &pointset ; print "
\n"; if ( $hostflag eq 'yes') { print "($hst)"; } print "..$regdate\[$no\]
"; print "
\n"; #レス表示 $j = 0 ; foreach $buf ( @RESLOG ) { ($no2,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$h,$m,$syo,$hst,$col,$col_f,$ichigeki,$d2,$d3) = split(/,/,$buf); if ( $no eq $resno ) { print "
\n"; print "
\n"; print "
\n"; print "\n"; print "
\n"; if ( $titleset == 1 ) { if ( !($ttl) ) { $ttl = "(無題)"; } print "■--$ttl
\n"; } print "++ $name\n"; print ""; if ( $email ne '' ) { print ""; if ( $maillinklogo ) { print ""; } else { print "[MAIL]"; } print "\n"; } if ( $hp ne '' ) { print ""; if ( $homelinklogo ) { print ""; } else { print "[URL]"; } print "\n"; } print ""; &pointset2 ; print "
\n"; #アイコン表示 if ( $icon_use eq 'yes' ) { &icon_set($name) ; } else { print " "; } print "\n"; $comment =~ s/([^=^\"]|^)(http|ftp)([\w|\!\#\&\=\-\%\@\~\;\+\:\.\?\/]+)/$1こちら<\/a>/g; if ( $colf_use != 1 ) { #文字色 (背景色は元メッセージと同様) $col_f = $COLORS_F[$col_f] ; #文字色 } else { $col_f = $colf ; #文字色 } print "$comment
\n"; $no2 = sprintf("%d",$no2); print "
"; &pointset ; print "
\n"; if ( $hostflag eq 'yes') { print "($hst)"; } print "..$regdate\[$no2\]
\n"; print "
\n"; print "
\n"; $j++; } } print "
\n"; } $z++; } if ( $FORM{'action'} ne 'res' ) { print "
\n"; print "\n"; print "\n"; if ( $FORM{'disppage'} != 0 && $FORM{'disppage'} !=1) { print "\n"; } if ( $FORM{'disppage'} + 1 <= $p ) { print "\n"; } print "
\n"; } print "
\n"; print "
"; if ( $framepos != 0 ) { $tgt = "target=view"; } else { $tgt = ""; } print "
\n"; print "No.\n"; print "Pass\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } ###<-------------------------------------------------------------- ###<--- ログ出力 ###<-------------------------------------------------------------- sub regist { #掲示板荒らし対策 # ホスト名を取得 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq "$addr") { ($p1,$p2,$p3,$p4) = split(/\./,$addr); $temp = pack("C4",$p1,$p2,$p3,$p4); $host = gethostbyaddr("$temp", 2); if ($host eq "") { $host = $addr; } } foreach $buf(@DANGER_LIST){ if ( $buf ) { $buf=~ s/\./\\./g; $buf=~ s/\?/\./g; $buf=~ s/\*/\.\*/g; if($host =~ /$buf/gi){ &error("\申\し\訳ありません。
あなたのプロバイダーからは投稿できませんでした. "); } } } if ( $FORM{'name'} eq '') { &error("お名前を入力して下さい。"); } if ( $FORM{'comment'} eq '') { &error("メッセージは省略出来ません。"); } if ( $maxword ne '' && (length($FORM{'comment'}) > $maxword)) { &error("メッセージは$maxword文字までしか登録出来ません。"); } &filelock ; #ファイルロック &dataread ; #<<<ログ読み込み $cnt = 0 ; foreach $buf ( @SVLOG ) { ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$h,$m,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$buf); if ( $name eq $FORM{'name'} && $ttl eq $FORM{'title'} && $comment eq $FORM{'comment'} ) { &fileunlock ; &error("二重投稿は禁止しています。") ; last ; } if ( $host eq $hst && $renchan != 0 && $resno eq '' && $FORM{'resno'} eq '' ) { $cnt++ ; if ( $cnt >= $renchan ) { &fileunlock ; &error("新規投稿を連続$renchan回以上は禁止しています。"); } } else { $cnt = 0 ; } if ( $FORM{'resno'} ne '' && $FORM{'resno'} eq $oyano ) { $svname = $name ; } } if ( $logfile2 ) { &pointcomp; } #ポイント計算 $dcnt2 = @SVLOG; if ( $dcnt2 < 1 ) { $no = 1; #1件目 } else { $no = $MAXNO + 1; } if ( !($FORM{'resno'}) && $#MAINLOG + 1 >= $datamax ) { ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$hh,$mm,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$MAINLOG[$#MAINLOG]); @SVLOG2 = @SVLOG ; @SVLOG = () ; foreach $buf ( @SVLOG2 ) { ($oyano2,$name,$email,$hp,$ttl,$comment,$regdate,$resno2,$pass,$icon,$po,$po2,$hh,$mm,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$buf); if ( $oyano == $oyano2 || $oyano == $resno2) { } else { push(@SVLOG,$buf); } } } foreach $buf(@kanriname){if ( $buf && $FORM{'name'} eq $buf ) { $sw = 1 ; last ; }} #レス記事登録時で、ログを先頭に移動する場合の処理 if ( $resflag eq 'yes' && $FORM{'resno'} ne '') { $cnt = 0 ; $oyacnt = 1 ; foreach $buf ( @SVLOG ) { ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$hh,$mm,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$buf); if ( $oyano eq $FORM{'resno'} ) { $svtitle = $ttl ; $svno = $oyano ; splice(@SVLOG,$cnt,1); $wk = "$oyano,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$hh,$mm,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3"; unshift(@SVLOG,$wk); last ; } $cnt++ ; } } else { if ( $sendmail ) { foreach $buf ( @SVLOG ) { ($oyano,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$pass,$icon,$po,$po2,$hh,$mm,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$buf); if ( $oyano eq $FORM{'resno'} ) { $svtitle = $ttl ; $svno = $oyano ; last ; } } } } # パスワードの暗号化(crypt関数使用)) if ($FORM{'pass'} ne "") { &pass_enc($FORM{'pass'}); } else { $pass = '' ; } unshift(@SVLOG,"$no,$FORM{'name'},$FORM{'email'},$FORM{'hp'},$FORM{'title'},$FORM{'comment'},$today,$FORM{'resno'},$pass,$FORM{'icon'},$point,$point2,$h,$m,$syoshin,$host,$FORM{'color'},$FORM{'color_f'},$ichi,,\n"); if ( !(open(OUT,">$logfile"))) { &fileunlock ; &error("ログファイル($logfile)のオープンに失敗しました"); } print OUT @SVLOG; close(OUT); &fileunlock ; #ファイルロック解除 #COOKIE設定 &cookieset ; if ( $sendmail ) { &SMail ; } $FORM{'action'} = '' ; if ( $framepos == 0 ) { if ( $damedame == 0 ) { print "Location: $script?\n\n"; } else { print "Content-type: text/html\n\n"; print ""; print $dmy_tok2_cookie; #i010313 print "\n\n"; } exit ; } } ###<-------------------------------------------------------------- ###<--- ログファイル更新 ###<-------------------------------------------------------------- sub update { if ( $FORM{'pass'} eq "") { &error("パスワードを入力して下さい。"); } &filelock ; #ファイルロック &dataread ; #<<<ログ読み込み $found = 0 ; foreach (@SVLOG) { ($no,$name,$email,$hp,$ttl,$comment,$regdate,$resno,$passwd,$icon,$po,$po2,$h,$m,$syo,$hst,$color,$color_f,$ichigeki,$d2,$d3) = split(/,/,$_); if ( $FORM{'no'} eq $no || ($resno && $FORM{'no'} eq $resno) ) { #<<<メンテ対象者の場合 if ($FORM{'no'} eq $no && $FORM{'pass'} ne $password && (&pass_dec($passwd))) { &fileunlock ; &error("パスワードが違います。"); } if ( $FORM{'no'} eq $no ) { $svname = $name ; $svhp = $h ; $svmp = $m ;} $found = 1 ; } else { push(@new,$_); } if ( $svresno && $svresno == $no ) { $svresname = $name ; } } if ( $found == 0 ) { &fileunlock ; &error("該当する記事Noのデータは存在していません。"); } if ( !(open(OUT,">$logfile"))) { &fileunlock ; &error("ログファイル($logfile)のオープンに失敗しました"); } print OUT @new; close(OUT); foreach $buf(@kanriname){if ( $buf && $svname eq $buf ) { $sw = 1 ; last ; }} if ( $logfile2 && $sw != 1 ) { if ( !(open(IN2,"$logfile2"))) { &fileunlock ; &error("ポイント管理ファイル($logfile2)のオープンに失敗しました"); } while ( ) { ($hpmp,$n) = split(/,/,$_); $n =~ s/\n//; if ( $svname eq $n ) { $hp = substr($hpmp,0,9) ; if ( $hp > 0 ) { #i010605 $hp = $hp - $svhp ; if ( $hp < 0 ) { $hp = 0 ; } $hp = sprintf("%09d",$hp); } $mp = substr($hpmp,9,9) ; #u010609 if ( $mp > 0 ) { #i010605 $mp = $mp - $svmp ; if ( $mp < 0 ) { $mp = 0 ; } } $mp = sprintf("%09d",$mp); push(@sv,"$hp$mp,$n\n"); } elsif ( $dorobo == 1 && $svresname eq $n && $svresname ne $svname ) { $hp = substr($hpmp,0,9) ;$hp = $hp + $svhp ; if ( $hp < 0 ) { $hp = 0 ; } $hp = sprintf("%09d",$hp); $mp = substr($hpmp,9,9) ;$mp = $mp + $svmp ; $mp = sprintf("%09d",$mp); if ( $mp < 0 ) { $mp = 0 ; } push(@sv,"$hp$mp,$n\n"); } else { push(@sv,$_); } } close(IN2); #i010427 if ( !(open(OUT,">$logfile2"))) { &fileunlock ; &error("ポイント管理ファイル($logfile2)のオープンに失敗しました"); } print OUT @sv; close(OUT); } &fileunlock ; #ファイルロック解除 if ( $framepos == 0 ) { if ( $damedame == 0 ) { print "Location: $script?\n\n"; } else { print "Content-type: text/html\n\n"; print ""; print $dmy_tok2_cookie; #i010313 print "\n\n"; } exit ; } } ###<-------------------------------------------------------------- ###<--- Information(アイコン一覧) ###<-------------------------------------------------------------- sub icondisp { &header(2) ; #<<■■■ アイコン一覧 ■■■

\n"; print "\n"; $i = 0 ; $j = 0 ; while ( 1 ) { if ( $i == 0 ) { print "\n"; for (1..$icon_line) { print "\n"; } print "\n"; } print "\n"; for ( $ln = 1 ; $j <= $#icon_gif && $ln <= $icon_line ; ) { if ( $icon_gif_w[$j] != 0 ) { $dmy = "width=\"$icon_gif_w[$j]\" height=\"$icon_gif_h[$j]\"" ; } else { $dmy = "" ; } print "\n"; print "\n"; $j++ ; $ln++ ; } if ( $j > $#icon_gif ) { if ( $ln < $icon_line ) { for ( ; $ln <= $icon_line ; ) { print "\n"; print "\n"; $ln++ ; } } print "\n"; last ; } print "\n"; $i++; } print "
アイコン名前
$iconnm[$j]  
"; &footer ; #<<■■■ カラーサンプル ■■■

\n"; print "\n"; if ( $colf_use == 0 ) { print ""; } if ( $colb_use == 0 ) { print ""; } print "
\n"; print "\n"; for ( $i = 0 ; $i <= $#COLORS_F ; $i++) { print "\n"; } print "
▽文字色
■■■$COLORS_FNM[$i]
\n"; print "\n"; for ( $i = 0 ; $i <= $#COLORS_B ; $i++) { print "\n"; } print "
▽背景色
■■■$COLORS_BNM[$i]
"; &footer ; #<<"; last ; } } #管理者の投稿の場合、管理者用アイコンに置き換える if ( $oiconpass ) { #i001003 if ( $ango == 1 ) { $wpass = crypt($oiconpass, $oiconpass); } else { $wpass = $oiconpass ; } if ( $pass eq $wpass ) { $found = 1 ; if ( $oicon_gif_w != 0 ) { $dmy = "width=\"$oicon_gif_w\" height=\"$oicon_gif_h\"" ; } else { $dmy = "" ; } print ""; } } #i001003 if ( $found == 0 ) { if ( !($icon) ) { $icon = 0 ; } if ( $icon_gif_w[$icon] != 0 ) { $dmy = "width=\"$icon_gif_w[$icon]\" height=\"$icon_gif_h[$icon]\"" ; } else { $dmy = "" ; } print ""; } } else { #管理者の投稿の場合、管理者用アイコンに置き換える if ( $ango == 1 ) { $wpass = crypt($oiconpass, $oiconpass); } else { $wpass = $oiconpass ; } if ( $oiconpass && $pass eq $wpass ) { #u010427 if ( $oicon_gif_w != 0 ) { $dmy = "width=\"$oicon_gif_w\" height=\"$oicon_gif_h\"" ; } else { $dmy = "" ; } print ""; } else { if ( $icon_gif_w[$syo] != 0 ) { $dmy = "width=\"$icon_gif_w[$syo]\" height=\"$icon_gif_h[$syo]\"" ; } else { $dmy = "" ; } print ""; } } } ###<------------------------------------------------------------- ###<--- クッキー取得 ###<-------------------------------------------------------------- sub cookieget { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'updown_2'}); foreach $pair (@pairs) { ($name, $value) = split(/\!/, $pair); $COOKIE{$name} = $value; } } ###<------------------------------------------------------------- ###<--- クッキー設定 ###<-------------------------------------------------------------- sub cookieset { ($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"; } $mong = ('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\-$mong\-$yearg $hourg:$ming:$secg GMT"; if ($FORM{'color'} eq '' && $COOKIE{'cl'} ne '' ) { $FORM{'color'} = $COOKIE{'cl'} ; } $cook="nm\!$FORM{'name'},em\!$FORM{'email'},hp\!$FORM{'hp'},ps\!$FORM{'pass'},ic\!$FORM{'icon'},cl_f\!$FORM{'color_f'},cl\!$FORM{'color'}"; print "Set-Cookie: updown_2=$cook; expires=$date_gmt\n"; $dmy_tok2_cookie = "\n"; } ###<-------------------------------------------------------------- ###<--- エラー処理 ###<-------------------------------------------------------------- sub error { &header(2) ; print "


$_[0]


\n"; &footer; exit; } ###<-------------------------------------------------------------- ###<--- ファイルロック設定 ###<-------------------------------------------------------------- sub filelock { foreach (1 .. 5) { if (-e $lockfile) { sleep(1); } else { open(LOCK,">$lockfile"); close(LOCK); return; } } &error("只今他の方が書き込み中です。ブラウザの「戻る」で戻って再度登録を行って下さい。"); } ###<-------------------------------------------------------------- ###<--- ファイルロック解除 ###<-------------------------------------------------------------- sub fileunlock { if (-e $lockfile) { unlink($lockfile); } } ###<-------------------------------------------------------------- ###<--- Information ###<-------------------------------------------------------------- sub info { &header(2) ; #<<---\昇\進資格---

\n"; print "以下の条件に従って\昇\進していきます!!

\n"; $i = 0; print "\n"; print "\n"; print ""; $k = $#pointget_nm ; for ( @pointget_nm ) { print "\n"; print "\n"; $i++; } print "
昇進状態"; print "昇進条件
$pointget_nm[$i]"; $buf = $point_disp2 ; $buf =~ s/現在の//; if ( $pointflg == 2 ) { $wk = $pointget_1[$i] ; if ( $kanma == 1 ) { 1 while $wk =~ s/(.*\d)(\d\d\d)/$1,$2/g; } $buf =~ s/\*1/$wk/; $wk = $pointget_2[$i] ; if ( $kanma == 1 ) { 1 while $wk =~ s/(.*\d)(\d\d\d)/$1,$2/g; } $buf =~ s/\*2/$wk/; print "$buf以上\n"; } else { if ( $i == 0 ) { $buf =~ s/\*1/$pointget_1[1]/; if ( $kanma == 1 ) { 1 while $buf =~ s/(.*\d)(\d\d\d)/$1,$2/g; } print "$buf未満\n"; } else { $buf =~ s/\*1/$pointget_1[$i]/; if ( $kanma == 1 ) { 1 while $buf =~ s/(.*\d)(\d\d\d)/$1,$2/g; } print "$buf以上\n"; } } print "
"; exit; } ###<------------------------------------------------------------- ###<--- パスワード暗号化 ###<-------------------------------------------------------------- sub pass_enc { if ( $ango == 1 ) { $pass = crypt($_[0], $_[0]); } else { $pass = $_[0]; } } ###<------------------------------------------------------------- ###<--- パスワードチェック ###<-------------------------------------------------------------- sub pass_dec { if ( $ango == 1 ) { if ($_[0] ne '' && ( crypt($FORM{'pass'}, $_[0]) eq $_[0]) ) { return 0 ; } } else { if ($FORM{'pass'} eq $_[0]) { return 0 ; } } return 1; } ###<------------------------------------------------------------- ###<--- みんなの昇進状態 ###<-------------------------------------------------------------- sub rankdisp { if ( !(open(IN,"$logfile2"))) { &error("ログファイル($logfile2)のオープンに失敗しました"); } @RANKDATA = ; &header(2) ; #<<
\n"; print "<<< みんなの昇進状態 >>>
\n"; print "昇進ランキング上位$point_disp人を表\示しています。

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "" if ( $pointflg == 2 ) ; print "\n"; @SAVEDATA = (); foreach ( @RANKDATA ) { ($hpmp,$nm) = split(/,/,$_); $hp = substr($hpmp,0,9) ; $mp = substr($hpmp,9,9) ; #■昇進状態 $syoshin = 0 ; for ( $i = 0 ; $i <= $#pointget_1 ; $i++ ) { if ( $hp >= $pointget_1[$i] ) { $syoshin = 0 ; if ( $pointflg == 2 ) { for ( $k = 0 ; $k <= $#pointget_2 && $k <= $i ; $k++ ) { if ( $mp >= $pointget_2[$k] ) { $syoshin = $k ; } } } else { $syoshin = $i ; } } } $syoshin = sprintf("%02d",$syoshin) ; push(@SAVEDATA,"$syoshin$hpmp,$nm"); } @SAVEDATA = sort @SAVEDATA ; @SAVEDATA = reverse @SAVEDATA ; $j = 1 ; foreach ( @SAVEDATA ) { ($shpmp,$nm) = split(/,/,$_); if ( $j <= $point_disp ) { $nm =~ s/\n//g; #i010123 if ( $nm eq $kanrinin ) { next ; } #u010605 $syoshin = substr($shpmp,0,2) ; $hp = substr($shpmp,2,9) ; $mp = substr($shpmp,11,9) ; $nm =~s/\n//; print "\n"; print "\n"; if ( $hp != 0 ) { $hp =~ s/^0+// ; } else { $hp = 0 ; } if ( $mp != 0 ) { $mp =~ s/^0+// ; } else { $mp = 0 ; } if ( $kanma == 1 ) { 1 while $hp =~ s/(.*\d)(\d\d\d)/$1,$2/g; 1 while $mp =~ s/(.*\d)(\d\d\d)/$1,$2/g; } print "\n"; if ( $pointflg == 2 ) { print "\n"; } print "\n"; } $j++ ; } print "
昇進状態お名前$point_word1$point_word2
$pointget_nm[$syoshin]$nm$hp$mp


\n"; &footer ; exit ; } ###<------------------------------------------------------------- ###<--- 使い方 ###<-------------------------------------------------------------- sub howto { &header(2) ; #<<\n"; print "<<< 使い方 >>>\n"; print $howto ; &footer ; exit ; } ###<---------------------------------------------------------------------------------- ###<--- ■ポイント計算 ###<--- ・$FORM{'comment'}を取得しポイントを計算します。 ###<--- ・$FORM{'comment'}の中に設定ファイルの第一要素の単語が ###<--- 発見された場合、第二要素に設定されているポイントをHP数、 ###<--- 第三要素に設定されているポイントをMP数として加算します。 ###<---------------------------------------------------------------------------------- sub pointcomp { if ( !(open(IN,"$inifile"))) { &fileunlock ; &error("設定ファイル($inifile)のオープンに失敗しました"); } @dic = ; close(IN); local($string) = $FORM{'comment'}; if ( !(open(IN2,"$logfile2"))) { &fileunlock ; &error("ポイント管理ファイル($logfile2)のオープンに失敗しました"); } $flg = 0 ; $point = 0 ; $point2 = 0 ; while ( ) { ($hpmp,$n) = split(/,/,$_); $hp = substr($hpmp,0,9) ; $mp = substr($hpmp,9,9) ; $n =~ s/\n//; if ( $FORM{'name'} eq $n ) { $point = $hp ; $point2 = $mp ; } } close(IN2); #■攻撃:ランダムに攻撃を行い、HP・MPを減少させる srand(time ^ ($$ + ($$ << 15))); $w = int(rand(31)) ; $h = 0 ; $m = 0 ; $ichi = 0 ; $pointflg2 = 0 ; #■乱数が設定値($down)で割り切れる場合のみ攻撃(ポイント増減)させる if ( $down != 0 && ( $w % $down == 0 && ( $point != 0 || $point2 != 0 ) ) ) { $w = int(rand($#pointget_hp)) ; $h = $pointget_hp[$w] ; $m = $pointget_mp[$w] ; $w = int(rand(2)) ; if ( $w == 0 ) { #痛恨の一撃 $point = $point - $h ; $point2 = $point2 - $m ; $h = $h * -1 ; $m = $m * -1 ; $ichi = "-" ; $pointflg2 = 1; } else { #快心の一撃 $point = $point + $h ; $point2 = $point2 + $m ; $ichi = "+" ; $pointflg2 = 1; } } else { #■ポイント加算 ###<----- terra氏(http://www2q.biglobe.ne.jp/~terra/cgi/)の辞書変換ルーチンを参考にさせて頂きました----- foreach $line (@dic) { ($a,$b,$c) = split(/,/,$line); $c =~ s/\n//; $stpos = 0; while (index($string, $a, $stpos) >= $stpos) { $pos = index($string, $a, $stpos); $len = length($a); $point = $point + $b ; $point2 = $point2 + $c ; $h = $h + $b ; $m = $m + $c ; $stpos = $pos + $len; } } } if ( $point < 0 ) { $point = 0 ; } if ( $point2 < 0 ) { $point2 = 0 ; } if ( $pointflg == 1 ) { $point2 = 0 ; $m = 0 ; } foreach $buf(@kanriname){if ( $buf && $FORM{'name'} eq $buf ) { $sw = 1 ; last ; }} if ( !(open(IN2,"$logfile2"))) { &fileunlock ; &error("ポイント管理ファイル($logfile2)のオープンに失敗しました"); } $flg = 0 ; while ( ) { ($hpmp,$n) = split(/,/,$_); $n =~ s/\n//; if ( $FORM{'name'} eq $n) { $p1 = sprintf("%09d",$point); $p2 = sprintf("%09d",$point2); $flg = 9 ; push(@sv,"$p1$p2,$n\n"); } elsif ( $dorobo == 1 && $svname eq $n && $sw != 1 && $pointflg2 != 0 ) { #泥棒機能がオン・ポイント減少させない人は除く・会心の一撃か痛恨の一撃のみ $p1 = substr($hpmp,0,9) ; $p1 = $p1 - $h ; $p2 = substr($hpmp,9,9) ; $p2 = $p2 - $m ; if ( $p1 < 0 ) { $p1 = 0 ; } if ( $p2 < 0 ) { $p2 = 0 ; } #i010305 $p1 = sprintf("%09d",$p1); $p2 = sprintf("%09d",$p2); $flg = 9 ; push(@sv,"$p1$p2,$n\n"); } else { push(@sv,$_); } } close(IN2); if ( $flg == 0 ) { $p1 = sprintf("%09d",$point); $p2 = sprintf("%09d",$point2); push(@sv,"$p1$p2,$FORM{'name'}\n"); } if ( !(open(OUT,">$logfile2"))) { &fileunlock ; &error("ポイント管理ファイル($logfile2)のオープンに失敗しました"); } print OUT @sv; close(OUT); #■昇進状態 $syoshin = 0 ; for ( $i = 0 ; $i <= $#pointget_1 ; $i++ ) { if ( $point >= $pointget_1[$i] ) { $syoshin = 0 ; if ( $pointflg == 2 ) { for ( $j = 0 ; $j <= $#pointget_2 && $j <= $i ; $j++ ) { if ( $point2 >= $pointget_2[$j] ) { $syoshin = $j ; } } } else { $syoshin = $i ; } } } } ###<------------------------------------------------------------- ###<--- ポイント処理1 ###<-------------------------------------------------------------- sub pointset { if ( $logfile2 ) { print "\n"; if ( $h != 0 ) { $h =~ s/^0+// ; } else { $h = 0 ; } if ( $m != 0 ) { $m =~ s/^0+// ; } else { $m = 0 ; } $hh = $h ; $mm = $m ; if ( $h < 0 && $sign == 0 ) { $hh = $hh * -1 ; } if ( $m < 0 && $sign == 0 ) { $mm = $mm * -1 ; } if ( $kanma == 1 ) { 1 while $hh =~ s/(.*\d)(\d\d\d)/$1,$2/g; 1 while $mm =~ s/(.*\d)(\d\d\d)/$1,$2/g; } if ( $ichigeki eq '+' ) { print "$point_word5
\n"; } if ( $ichigeki eq '-' ) { print "$point_word6
\n"; } if ( $pointflg == 2 ) { if ( $h != 0 ) { if ( $h > 0 ) { print "$hh$point_word1" ; if ( $m < 0 ) { print "$point_word3、$mm$point_word2$point_word4\n" ; } elsif ( $m > 0 ) { print "、$mm$point_word2$point_word3" ; } else { print "$point_word3\n"; } } else { print "$hh$point_word1" ; if ( $m < 0 ) { print "、$mm$point_word2$point_word4\n" ; } elsif ( $m > 0 ) { print "$point_word4、$mm$point_word2$point_word3\n" ; } else { print "$point_word4\n"; } } } else { if ( $m < 0 ) { print "$mm$point_word2$point_word4\n" ; } elsif ( $m > 0 ) { print "$mm$point_word2$point_word3\n" ; } } } else { if ( $h != 0 ) { if ( $h > 0 ) { print "$hh$point_word1" ; print "$point_word3\n"; } else { print "$hh$point_word1" ; print "$point_word4\n"; } } } print "
"; } } ###<------------------------------------------------------------- ###<--- ポイント処理2 ###<-------------------------------------------------------------- sub pointset2 { if ( $logfile2 ) { print "\n"; print "
>>> $pointget_nm[$syo] \n"; if ( $po != 0 ) { $po =~ s/^0+// ; } else { $po = 0 ; } if ( $po2 != 0 ) { $po2 =~ s/^0+// ; } else { $po2 = 0 ; } $buf = $point_disp2 ; if ( $kanma == 1 ) { 1 while $po =~ s/(.*\d)(\d\d\d)/$1,$2/g; 1 while $po2 =~ s/(.*\d)(\d\d\d)/$1,$2/g; } $buf =~ s/\*1/$po/; $buf =~ s/\*2/$po2/; print " $buf"; print "
"; } } ###<-------------------------------------------------------------- ###<--- SendMail ###<-------------------------------------------------------------- sub SMail { $mailbuf = ""; $cv_ttl = $title; if ( $hiho == 1 ) { &jcode'convert(*cv_ttl,'euc'); open(MAIL,"| $sendmail -s \"$cv_ttl\" -f $FORM{'email'} $smail_address ") || &error("Sendmail Error!!"); } else { &jcode'convert(*ttl,'jis'); open(MAIL,"| $sendmail -t") || &error("Sendmail Error!!"); $mailbuf = "To: $smail_address\n"; $mailbuf .= "From: $FORM{'email'}\n"; $mailbuf .= "Subject: $cv_ttl\n"; $mailbuf .= "Content-Transfer-Encoding: 7bit\n"; $mailbuf .= "Content-type: text/plain\n"; $mailbuf .= "\n\n"; } $mailbuf .= "============================================================\n"; $mailbuf .= "■---『$title』に投稿がありました---■\n\n"; $mailbuf .= "投稿日時:$today\n"; $mailbuf .= "============================================================\n\n"; $mailbuf .= "▼お名前\n"; $mailbuf .= "$FORM{'name'}\n\n"; if ( $FORM{'email'} ne '' ) { $mailbuf .= "▼メールアドレス \n"; $mailbuf .= "$FORM{'email'}\n\n"; } if ( $FORM{'hp'} ne '' ) { $mailbuf .= "▼HPアドレス \n"; $mailbuf .= "http://$FORM{'hp'}\n\n"; } if ( $FORM{'resno'} eq '' && $FORM{'title'} ) { $wk = $FORM{'title'} ; } else { $wk = "$svtitle(親記事No:$svno)に対してのレス記事です。" ; } if ( $wk && $titleset == 1 ) { $mailbuf .= "▼タイトル\n"; $mailbuf .= "$wk\n\n"; } if ( $FORM{'pass'} ) { $mailbuf .= "▼パスワード \n"; $mailbuf .= "$FORM{'pass'}\n\n"; } $mailbuf .= "▼コメント\n"; $mailbuf .= "$FORM{'comment'}\n\n"; $mailbuf .= "============================================================\n"; #漢字コードJIS変換&改行コードLF変換。 $mailbuf =~ s/\r\n/\n/g; $mailbuf =~ s/\r/\n/g; $mailbuf =~ s/
/\n/g; &jcode'convert(*mailbuf,'jis'); print MAIL $mailbuf ; close(MAIL); }