#! /usr/local/bin/perl #↑各プロバイダで指定しているパスを記述 # # 電光!(フリーソフト) $ver = 5.10; $Last_Modified = '2002/04/08'; # Copyright (C) 2002 suepon , All rights reserved. # http://CGIScriptMarket.com/ # #---------------------- 初期設定ここから ----------------------# # ※ v.5.09までとv.5.10以降では、 #   JavaScript使用時の貼り付けコードが変更になっています。 #   アップデートの際には注意して下さい。 # マスターパスワードの設定(必ず設定して下さい→半角英数) $master = "abcd"; # 記事投稿モード $send_mode = 0; # 誰でも投稿可 = 0; 管理人のみ投稿可 = 1; # レス記事投稿モード $res_mode = 1; # 無効 = 0; 有効 = 1; # レス記事表示モード # REアイコンをクリックして表示開始 = 0; # レスが有れば自動的に表示開始 = 1; $res_write_mode = 1; # 記事投稿時の背景色文字色の指定機能(IE4~ NN6~ で有効) $col_mode = 1; # 無効 = 0; 有効 = 1; # このスクリプトファイルをhttp:からのフルパスで記述 $script = "http://ayacho.hp.infoseek.co.jp/cgi-bin/denkoh/denkoh.cgi"; # 作業用ディレクトリ(/temp/フォルダ) # 表示するページから見たパスで記述 $data_dir = "./denkoh/temp/"; # 作業用ディレクトリ(/temp/フォルダ) # このスクリプトファイルから見たパスで記述 $tmp = "./temp/"; # ログファイルの名前 $file = "data.cgi"; # jcode.pl # このスクリプトファイルから見たパスで記述 $jcode = "./jcode.pl"; # ファイルロック(一部、この機能が使用できないサーバがあるようです) # 書込が頻繁にあり、同時投稿などでファイル破損の可能性がある場合はONにする $lock_mode = 0; # ファイルロックOFF = 0 ファイルロックON = 1 # 記事の最大記録サイズ # 電光!は表示ページに全てのログを書き出しますので、 # あまり大きな値にすると表示ページそのもののレスポンスが低下します。 # (5000bytesで、全記事に適当にレスが付いた状態でも親記事で数えて概ね10件以上の保存量が確保できます) $max_log = 5000; # 単位:bytes(1kb = 1000bytes) # 投稿記事の最大文字数 $max_len = 45; #+++++ 以下自動リロードモード設定 # 表示ページとは別のサーバに設置する場合や # サーバの設定(htmlファイルとcgiファイルの呼び出しURLが違う等)により # 投稿後、削除後に記事表示画面に「書き込み不可」「アクセス不可」等の # JavaScriptエラーが出て自動リロードができない場合は # 表示ページと同じ階層にrel.htmlを設置してこの値を 0 にする #(特に問題ない場合は設定の必要無し) $relcheck = 1; # 上の値を0にした場合は、 # 以下2行のコメントアウト(#を消去)してhttp://からのフルパスでURLを指定 #$rel = "http://www.xxx.xx/~xxxxx/rel.html"; # rel.htmlの場所 #$up_dir = "http://www.xxx.xx/~xxxxx/denkoh/temp/"; # 作業フォルダ(temp)の場所 #(アップロードされたはずのファイルが表示されない場合はココ$up_dirを修正) #+++++ 以下 ファイルのアップロード機能に関する設定 # ファイルのアップロード機能 $ul_mode = 1; # 無効 = 0; 有効 = 1; # アップロードできるファイルの最大サイズ # 0 : 制限無し 単位 : バイト(1000bytes = 1kb) $max_size = 20000; # アップロード禁止ファイルを指定 # 0 : しない 1 : する $up_limiter = 1; # アップロード禁止ファイルの拡張子 # ('拡張子1','拡張子2','拡張子3');の形式でいくつでも記述(.ドットは要りません) # 特に指定しない場合は設定の必要無し @file_types = ('bmp','exe',''); #+++++ 以下 単体で使用する場合の設定(ページの1部品として使用場合は必要無し) # BODY 設定 $html_body = ''; # ページのタイトル() $title = "電光!"; #+++++ 以下 掲示板部分の設定 # アイコン用画像 $img_dir = "http://ayacho.hp.infoseek.co.jp/cgi-bin/denkoh/image/"; # 画像設置ディレクトリ(http:からのフルパスで記述) $memo = "memo.gif"; # 投稿/削除ウィンドウの起動アイコン画像 $skip = "skip.gif"; # 記事をスキップさせるアイコン画像 $home0 = "home_off.gif"; # URLの登録が無い場合のアイコン画像 $home1 = "home.gif"; # URLの登録が有る場合のアイコン画像 $mail0 = "mail_off.gif"; # E-mailの登録が無い場合のアイコン画像 $mail1 = "mail.gif"; # E-mailの登録が有る場合のアイコン画像 $image = "image.gif"; # 画像の登録が有る場合のアイコン画像 $atmt0 = "atmt_off.gif"; # ファイルの登録が無い場合のアイコン画像 $atmt1 = "atmt.gif"; # 画像以外のファイルが登録されている場合のアイコン画像 $rvrs0 = "reverse0.gif"; # 記事の表示順を逆転させるアイコン画像1 $rvrs1 = "reverse1.gif"; # 記事の表示順を逆転させるアイコン画像2 $res0 = "res_off.gif"; # レス記事が無い場合のアイコン画像 $res1 = "res1.gif"; # レス記事が有る場合のアイコン画像 $res2 = "res2.gif"; # レス記事表示中のアイコン画像 $img_size = "width=15 height=15"; # ↑これらの画像サイズ $bg = "#ffffff"; # 領域全体の背景色(指定しない場合は ""; にする) $bgimg = "solid_silver.jpg"; # 領域全体の背景画像(指定しない場合は ""; にする) $bg_height = 30; # 領域全体の高さをピクセル値で指定 # ↑デフォルトまたはオプションで配布の背景画像を使う場合はこのまま # ↑(任意の画像を使う場合は背景画像サイズによって調整/指定しない場合は空白) # 記事表示部分 $disp_size = "105"; # 表示用に確保するサイズ(基準はIE…他のブラウザへはこの値から自動で調整) $disp_color ="#00ff00"; # デフォルトの文字色(投稿時に色の指定が無い場合や色指定無効の場合はこの色で表示) $disp_bg = "#000000"; # デフォルトの背景色( 〃 ) # 投稿者の名前部分 $name_size = 15; # 表示用に確保するサイズ(基準はIE…他のブラウザへはこの値から自動で調整) $name_color ="#00ff00"; # デフォルトの文字色(投稿時に色の指定が無い場合や色指定無効の場合はこの色で表示) $name_bg = "#000000"; # デフォルトの背景色( 〃 ) # 記事の先頭に付ける文字列(空白及び'を混ぜないこと) $new_head = "NEW-"; # 新着順に表示している時用 $old_head = "OLD-"; # 投稿順に表示している時用 # 投稿記事が無い場合に表示する案内文(空白及び'を混ぜないこと) $wm_msg = "超小型電光掲示板です…お知らせでもニュースでも御自由に投稿して下さい!!!"; # 上の文字列表示時の投稿者欄表示名(空白及び'を混ぜないこと) $wm_name = "管理人"; # 日付の表示 $time_mode = 1; # 無効 = 0; 有効 = 1; #+++++ 以下 別ウィンドウ部分(投稿/削除等)の設定 #(更に細かく設定する場合は 1318~1364行目 [sub style] を直接編集して下さい) $mw_fc = "#7b68ee"; # 文字色 $mw_bg = "#ffffff"; # 背景色 $mw_ht = "#8a2be2"; # ホットテキスト(リンク)の文字色 #------------------ 初期設定ここまで ------------------# #------------------ 詳細設定ここから ------------------# # ※よく判らない場合はいじらないこと # スキップアイコンのクリッカブルマップパラメータ $shape1 = "rect"; # 前の記事へ shape $coords1 = "0,0,6,14"; # 前の記事へ coords $shape2 = "rect"; # 次の記事へ shape $coords2 = "8,0,14,14"; # 次の記事へ coords # 記事のテロップ表示/消去のスピード $write_spd = 50; # 次の記事に移るまでの時間(ミリ秒) $brake_time = 1500; # 記事のテロップ表示終了後、消去を始めるまでの時間(ミリ秒) $stop_time = 3000; # デフォルトの文字サイズ(pt) $font_size = 10; # 記事表示部分のスタイル設定 $disp_style = "background:$disp_bg; font-size:$font_size\pt; color:$disp_color;"; # 名前表示部分のスタイル設定 $name_style = "background:$name_bg; font-size:$font_size\pt; color:$name_color;"; #------------------ 詳細設定ここまで ------------------# if ($ENV{'REQUEST_METHOD'} eq "POST") { binmode (STDIN); read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); if ($buffer) { require $jcode; } @pairs = split(/Content-Disposition/i,$buffer); foreach (@pairs) { $key = ""; if ($_ =~ /Content-Type\:/i) { ($a,$value) = split (/Content-Type\:.*?[\r\n|\r|\n]{4}/,$_); ($a,$name,$b,$filename,$c) = split (/\"/,$_); if ($filename =~ /\\/) { $key = "\\"; } elsif ($filename =~ /\//) { $key = "\/"; } if ($key) { $filename = substr ($filename,rindex ($filename,$key) + 1,length ($filename)); } $in{'filename'} = $filename; } else { if ($_ =~ /name\=\"(.*?)\"/) { $name = $1; $value = $_; } $value =~ s/.*?[\r\n|\r|\n]{4}//; } ($value,$a) = split (/[\r\n|\r|\n]{2}\-{29}/,$value); if ($name eq 'file' && $filename) { $in{'file'} = $value; } else { $value =~ s/[\r\t\n]//g; $value =~ s/<.*?>//g; $value =~ s/\,//g; $value =~ s/\"/\\"/g; &jcode'convert(*value,'sjis'); if ($name eq "del") { push(@DEL,$value); } else { $in{$name} = $value; } } } } else { $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $in{$name} = $value; } } ($sec,$min,$hour,$mday,$mon,$year) = localtime(time); $num = sprintf ("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec); $time = sprintf ("\?%02d\:%02d\:%02d",$hour,$min,$sec); $agent = $ENV{'HTTP_USER_AGENT'}; $url_size = 50; $in_size = 20; $file_size = 40; $col = 35; $row = 2; if ($agent =~ /gecko/i) { @g_vers = split (/\//,$agent); $g_ver = pop (@g_vers); } if ($agent =~ /msie/i && $agent =~ /mac/i) { $url_size = int($url_size * 0.7); $file_size = int($file_size * 0.7); } if (! ($agent =~ /msie/i) && $g_ver < 6.2) { $disp_size = int($disp_size * 0.7); $in_size = int($in_size * 0.7); $url_size = int($url_size * 0.7); $file_size = int($file_size * 0.7); $name_size = int($name_size * 0.7); if ($agent =~ /mac/i || $agent =~ /\[.*?\]/i) { if (! ($agent =~ /gecko/i)) { $NN = "\{ font-size:$font_size\pt; \}"; $disp_style = $name_style = ""; $NN_disp1 = ""; $NN_disp2 = ""; } } } else { $disp_style = "style=\"$disp_style\""; $name_style = "style=\"$name_style\""; $box = " style=\"border-width:0px;\""; } $cookie_name ="denkoh"; $copy = ' 電光!'; # ↑著作表示 削除禁止 $ver = sprintf("v\.%.2f",$ver); $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($par, $value) = split(/=/, $pair); $par =~ s/ //g; $DUMMY{$par} = $value; } @pairs = split(/,/,$DUMMY{$cookie_name}); foreach $pair (@pairs) { ($par, $value) = split(/:/, $pair); $COOK{$par} = $value; } if ($in{'mode'} eq 'input') { &input; } elsif ($in{'mode'} eq 'edit') { &delete1; } elsif ($in{'mode'} eq 'delete') { &delete2; } elsif ($in{'mode'} eq 'regist') { ®ist; } elsif ($in{'mode'} eq 'menu') { &menu; } elsif ($in{'mode'} eq 'res') { &res; } elsif ($in{'mode'} eq 'open_rel') { &open_rel; } elsif ($in{'mode'} eq 'appversion') { print "Content-type:text/html\n\n$ver \($Last_Modified\)"; exit; } else { &js_output; } sub js_output { if ($buffer eq "html") { $data_dir = $tmp; print "Content-type: text/html\n\n"; print "\n\n$title\n"; print "\n"; print "\n$html_body\n\n\n\n"; } elsif (! $buffer) { print "\n"; } } sub input { if ($send_mode && $in{'admin'} ne $master) { &gate; } if ($COOK{'url'}) { $url = "http\:\/\/$COOK{'url'}"; } else { $url = "http\:\/\/"; } if ($max_size) { $max_ks = $max_size / 1000 . " KB まで"; } else { $max_ks = "無制限"; } if ($up_limiter) { foreach (@file_types) { if ($_) { $file_check = "$file_check|\.$_"; } } $file_check =~ s/\|//; $file_check = "ffile.match(/$file_check/i)"; } else { $file_check = "1 == 2"; } if ($agent =~ /msie/i || $agent =~ /gecko/i) { $bgc = " onClick=\"bgc()\""; } if ($ul_mode) { $fcheck = "\n\tffile = document.denkoh_f.file.value;"; $falert = "\telse if (ffile) { if (ffile.indexOf(\".\") < 0 || $file_check) { if (confirm(\"【アップロード禁止ファイルが入力されました】\\n\\n拡張子不明ファイル及び以下の拡張子を持つファイルは、\\nアップロード禁止ファイルに指定されています。\\n\\n(@file_types)\\n\\nこのまま送信を続行するとファイルのアップロードは無視されます。\\nよろしいですか?\")) return true; else return false; } }"; } &header("【新規投稿】"); print <<"SRT"; SRT print "\n"; print "
\n$title 新規投稿

\n"; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($col_mode) { if ($agent =~ /gecko/i || $agent =~ /msie/i) { &palette; } } print "\n"; if ($ul_mode) { print "\n"; } print "\n"; print "
お名前
Eメール
投稿記事
(投稿する記事は最大$max_len文字まで)
URL
ファイル
(アップロード可能\サイズ:$max_ks)
PASS(半角英数)\n"; print "  
クッキー有効
\n"; print "

\n\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]$copy\n"; print "

"; exit; } sub res { if ($send_mode && $in{'admin'} ne $master) { &gate; } open(READ,"$tmp$file") || &error("[ $file ]が開けませんでした。"); @lines = ; close(READ); $i = 0; foreach (@lines) { $_ =~ s/\n//; ($parent,$res_line) = split (/<>/,$_); ($number,$name,$mail,$coment,$url,$pass,$upfile,$wid,$hgt,$bgcol,$txcol) = split(/\,/,$parent); if ($in{'no'} eq $number) { $i ++; last; } } if (! $i) { &error("指定された親記事が抽出できません。"); } if (! $bgcol) { $bgcol = "$disp_bg"; } if (! $txcol) { $txcol = "$disp_color"; } if ($COOK{'url'}) { $url = "http\:\/\/$COOK{'url'}"; } else { $url = "http\:\/\/"; } if ($max_size) { $max_ks = $max_size / 1000 . " KB まで"; } else { $max_ks = "無制限"; } if ($up_limiter) { foreach (@file_types) { if ($_) { $file_check = "$file_check|\.$_"; } } $file_check =~ s/\|//; $file_check = "ffile.match(/$file_check/i)"; } else { $file_check = "1 == 2"; } if ($ul_mode) { $fcheck = "\n\tffile = document.denkoh_f.file.value;"; $falert = "\telse if (ffile) { if (ffile.indexOf(\".\") < 0 || $file_check) { if (confirm(\"【アップロード禁止ファイルが入力されました】\\n\\n拡張子不明ファイル及び以下の拡張子を持つファイルは、\\nアップロード禁止ファイルに指定されています。\\n\\n(@file_types)\\n\\nこのまま送信を続行するとファイルのアップロードは無視されます。\\nよろしいですか?\")) return true; else return false; } }"; } &header("【レス記事投稿】"); print <<"SRT"; SRT print "\n"; print "
\n$title レス記事投稿

\n"; print "\n"; print "\n"; print "
■ $nameさんの投稿記事
$coment
へのレス

\n"; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($ul_mode) { print "\n"; } print "\n"; print "
お名前
Eメール
投稿記事
(投稿する記事は最大$max_len文字まで)
URL
ファイル
(アップロード可能\サイズ:$max_ks)
PASS(半角英数)\n"; print "  
クッキー有効
\n"; print "

\n\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]$copy\n"; print "

"; exit; } sub regist { if ($in{'name'} eq '' || $in{'coment'} eq '') { &error("記入漏れがあります"); } if ($in{'filename'}) { if (! $in{'file'}) { &error("指定されたファイルのデータが取得できません。"); } ($fname,$type) = split (/\./,$in{'filename'}); if (! $type) { &error("指定されたファイルは
拡張子不明の為アップロードできません。"); } if ($up_limiter) { $check = 0; foreach (@file_types) { if ($_ && $type eq $_) { $in{'filename'} = ""; last; } } } } if ($in{'filename'}) { if ($max_size && $max_size < length($in{'file'})) { &error("アップロードするファイルサイズが制限を越えています。"); } $i = 1; while (-e "$tmp$in{'filename'}") { $i ++; $in{'filename'} = "$fname\[$i\]\.$type"; } if (! open(FILE,"> $tmp$in{'filename'}")) { &error("ファイルのアップロードに失敗しました。"); } binmode (FILE); print FILE $in{'file'}; close (FILE); } $in{'name'} =~ s/\://g; $in{'name'} =~ s/\=//g; $in{'mail'} =~ s/\://g; $in{'mail'} =~ s/\=//g; $in{'url'} =~ s/http\:\/\///ig; $in{'coment'} =~ s/ /_/g; &get_scl($in{'filename'}); if($lock_mode) { &lock1; } open(READ,"$tmp$file") || &error("[ $file ]が開けませんでした。"); @lines = ; close(READ); if ($in{'no'}) { foreach $line (@lines) { $line =~ s/\n//; @all = split (/<>/,$line); $parent = shift (@all); $res_value = ""; foreach $res_line (@all) { ($re_num,$re_name,$re_mail,$re_coment,$re_url,$re_pass,$re_filename,$rwid,$rhgt) = split (/\,/,$res_line); if ($re_upfile && -e "$tmp$re_upfile") { $res_value = "$res_value\,<>$re_coment<>$re_name<>$re_mail<>$re_url<>$re_filename<>$rwid<>$rhgt"; } else { $res_value = "$res_value\,$re_num<>$re_coment<>$re_name<>$re_mail<>$re_url<><><>"; } } ($number,$name,$mail,$coment,$url,$pass,$upfile,$swid,$shgt,$bgcol,$txcol) = split(/\,/,$parent); if ($in{'no'} eq $number) { $value = "$line<>$num\,$in{'name'}\,$in{'mail'}\,$in{'coment'}\,$in{'url'}\,$in{'pass'}\,$in{'filename'}\,$wid\,$hgt\n"; $plus = "$number\,$coment\,$name\,$mail\,$url\,$upfile\,$swid\,$shgt\,$bgcol\,$txcol$res_value\,$num<>$in{'coment'}<>$in{'name'}<>$in{'mail'}<>$in{'url'}<>$in{'filename'}<>$wid<>$hgt"; push (@new,$value); } else { push (@new,"$line\n"); } } } else { $value = "$num\,$in{'name'}\,$in{'mail'}\,$in{'coment'}\,$in{'url'}\,$in{'pass'}\,$in{'filename'}\,$wid\,$hgt\,$in{'bgcol'}\,$in{'txcol'}\n"; unshift(@lines,$value); $plus = "$num\,$in{'coment'}\,$in{'name'}\,$in{'mail'}\,$in{'url'}\,$in{'filename'}\,$wid\,$hgt\,$in{'bgcol'}\,$in{'txcol'}"; @new = @lines; } if($lock_mode) { $lock = "$$\.lock"; } else { $lock = $file; } open(WRITE,"> $tmp$lock") || &error("[ $file ]が開けませんでした。"); print WRITE @new; close(WRITE); if($lock_mode) { &lock2; } if ($in{'cookie_mode'}) { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = localtime(time + 30*24*60*60); $y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday"; $m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun"; $m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec"; @youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6); @monthg = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11); $date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg); $COOK{'name'} = $in{'name'}; $COOK{'mail'} = $in{'mail'}; $COOK{'url'} = $in{'url'}; $COOK{'pass'} = $in{'pass'}; $COOK{'bgcol'} = $in{'bgcol'}; $COOK{'txcol'} = $in{'txcol'}; $cook = "name\:$in{'name'}\,mail\:$in{'mail'}\,url\:$in{'url'}\,pass:$in{'pass'}\,bgcol:$in{'bgcol'}\,txcol:$in{'txcol'}"; } else { $date_gmt = "Sun, 01-Jan-1995 01:00:00 GMT"; $COOK{'name'} = $COOK{'mail'} = $COOK{'url'} = $COOK{'pass'} = $COOK{'bgcol'} = $COOK{'txcol'} = $cook = ""; } print "Set-Cookie: $cookie_name=$cook; expires=$date_gmt\n"; if (! $relcheck) { print "Content-type:text/html\n\n"; print "\n"; exit; } &max_check; &header("【新規投稿】"); print "\n"; print "$in{'name'}様の投稿を受け付けました。\n"; print "

\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]\n"; print "

$copy
\n\n"; exit; } sub delete1 { if ($send_mode && $in{'admin'} ne $master) { &gate; } &header("【一覧/削除】"); if ($in{'mode'} eq 'delete' && $relcheck) { print "\n"; exit; } else { print "\n"; print "
$title 一覧/削除モード

\n"; print "削除する記事にチェックを入れて削除ボタンを押して下さい。\n"; print "

\n"; print "\n"; print "\n"; print ""; if ($ul_mode) { print ""; } print "\n"; open(READ,"$tmp$file") || &error("[ $file ]が開けませんでした。"); @lines = ; close(READ); foreach $line (@lines) { $line =~ s/\n//; @all = split (/<>/,$line); $parent = shift (@all); ($number,$name,$mail,$coment,$url,$pass,$upfile,$wid,$hgt,$bgcol,$txcol) = split(/\,/,$parent); $date = substr($number,2,2) . "\/" . substr($number,4,2) . "\/" . substr($number,6,2) . " " . substr($number,8,2) . "\:" . substr($number,10,2); if ($upfile) { if (-e "$tmp$upfile") { $upfile = "$upfile"; } else { $upfile = "$upfile"; } } else { $upfile = "
"; } if (! $bgcol) { $bgcol = $disp_bg; } if (! $txcol) { $txcol = $disp_color; } print "
\n"; print ""; if ($ul_mode) { print ""; } print "\n"; print "\n"; foreach $res_line (@all) { ($re_num,$re_name,$re_mail,$re_coment,$re_url,$re_pass,$re_filename,$wid,$hgt) = split (/\,/,$res_line); $re_date = substr($number,2,2) . "\/" . substr($number,4,2) . "\/" . substr($number,6,2) . " " . substr($number,8,2) . "\:" . substr($number,10,2); if ($re_filename) { if (-e "$tmp$re_filename") { $re_filename = "$re_filename"; } else { $re_filename = "$re_filename"; } } else { $re_filename = "
"; } print "\n"; print ""; if ($ul_mode) { print ""; } print "\n"; print "\n"; } } print "

日付名前記事ファイル
$date$name$coment$upfile
$re_date$re_name$re_coment$re_filename
\nPASS:\n"; print "  \n"; print "

\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]\n"; print "$copy

\n"; print ""; exit; } sub delete2 { if($lock_mode) { &lock1; } open(READ,"$tmp$file") || &error("[ $file ]が開けませんでした。"); @lines = ; close(READ); foreach $line (@lines) { $line =~ s/\n//; @all = split (/<>/,$line); $parent = shift (@all); ($number,$name,$mail,$coment,$url,$pass,$upfile,) = split(/\,/,$line); if ($in{'pass'} eq $master) { $pass = $master; } $key = 0; foreach $del (@DEL) { if ($del eq $number && $in{'pass'} eq $pass) { if ($upfile && -e "$tmp$upfile") { unlink ("$tmp$upfile"); } $key++; } } if ($key == 0) { foreach $res_line (@all) { $res_key = 0; ($re_num,$re_name,$re_mail,$re_coment,$re_url,$re_pass,$re_filename,$wid,$hgt) = split (/\,/,$res_line); foreach $del (@DEL) { if ($del eq $re_num && $in{'pass'} eq $re_pass) { if ($re_filename && -e "$tmp$re_filename") { unlink ("$tmp$re_filename"); } $res_key++; } } if (! $res_key) { $parent = "$parent<>$res_line"; } } push(@new,"$parent\n"); } } if($lock_mode) { $lock = "$$\.lock"; } else { $lock = $file; } open(WRITE,"> $tmp$lock") || &error("[ $file ]が開けませんでした。"); print WRITE @new; close(WRITE); if($lock_mode) { &lock2; } $in{'pass'} = $pass; &delete1(); } sub menu { if ($send_mode && $in{'admin'} ne $master) { &gate; } &header("【メニュー】"); print "\n"; print "\[ 新規投稿 \]
\n"; if (! $send_mode && $in{'no'}) { print "\[ レス投稿 \]
\n"; } print "\[ 一覧/削除 \]
\n"; print "\[ 閉じる \]\n"; print "
$copy\n"; print "\n"; exit; } sub header { print "Content-type: text/html\n\n"; print "\n"; print "\n"; &style(0); print "$title $_[0]\n"; print "\n\n"; } sub gate { &header("【管理モード】"); print "\n"; print "
\n"; print "\n"; print "管理者以外は
投稿不可です
"; print "passwoed?
\n"; print "
\n"; print "$copy\n
\n"; exit; } sub max_check { while (-s "$tmp$file" > $max_log) { if($lock_mode) { &lock1; } open(READ,"$tmp$file") || &error("[ $file ]が開けませんでした。"); @lines = ; close(READ); $del_line = pop (@lines); ($a,$b,$c,$d,$e,$f,$upfile,$g,$h) = split (/\,/,$del_line); if ($upfile && -e "$tmp$upfile") { unlink ("$tmp$upfile"); } if($lock_mode) { $lock = "$$\.lock"; } else { $lock = $file; } open(WRITE,"> $tmp$file") || &error("[ $file ]が開けませんでした。"); print WRITE @lines; close(WRITE); if($lock_mode) { &lock2; } } } sub get_scl { open (IMG,"$tmp/$_[0]"); binmode (IMG); if ($_[0] =~ /\.gif/i) { seek (IMG,6,0); read (IMG,$scl,4); ($wid,$hgt) = unpack("vv",$scl); } elsif ($_[0] =~ /\.png/i) { seek (IMG,16,0); read (IMG,$wid_p,4); read (IMG,$hgt_p,4); $wid_p2 = unpack ("H*",$wid_p); $hgt_p2 = unpack("H*",$hgt_p); $wid = hex ($wid_p2); $hgt = hex ($hgt_p2); } elsif ($_[0] =~ /\.jpg/i || $_[0] =~ /\.jpeg/i) { read (IMG,$head,2); while (IMG) { read (IMG,$head,4); ($val1,$val2,$val3) = unpack ("aan",$head); if ($val1 ne "\xFF") { $wid = 0; $hgt = 0; last; } elsif ((ord($val2) >= 0xC0) && (ord($val2) <= 0xC3)) { read (IMG,$head,5); ($hgt,$wid) = unpack ("xn2",$head); last; } else { read (IMG,$head,($val3 - 2)); } } } close (IMG); } sub palette { if (! $COOK{'bgcol'}) { $COOK{'bgcol'} = $disp_bg; } if (! $COOK{'txcol'}) { $COOK{'txcol'} = $disp_color; } print <<"EOF"; 背景色
文字色 EOF } sub error { &header("【エラー】"); print "
エラー

$_[0]

\n"; print "\[ 戻る \]\n"; print " \[ 閉じる \]\n"; print "

\n"; exit; } sub error_js { print "document.write('$_[0]');\n"; if ($buffer ne "js") { print "\n"; } exit; } sub copy { print "// 電光! $ver(Free soft)\n"; print "// 無断転載及び不正使用禁止\n"; print "// Last Modified:$Last_Modified\n"; print "// Copyright (C) 2001 suepon , All rights reserved.\n"; print "// http://CGIScriptMarket.com/\n\n"; } sub lock1 { local($list,@lists); local($retry) = 3; $list = `ls $tmp$ls` || &error("ファイルをロックできません"); @lists = grep(/\.lock/,split(/\s+/,$list)); while (@lists) { if (--$retry <= 0) { foreach (@lists) { unlink "$tmp$_" || &error("ファイルをロックできません"); } &error("ファイルをロックできません"); } sleep(1); $list = `ls $tmp$ls` || &error("ファイルをロックできません"); @lists = grep(/\.lock/,split(/\s+/,$list)); } } sub lock2 { local($list,@lists); $list = `ls $tmp$ls` || &error("書込に失敗した可能性があります"); @lists = grep(!/$lock/,grep(/\.lock/,split(/\s+/,$list))); if (@lists) { if (-e "$tmp$lock") { unlink("$tmp$lock"); } &error("書込に失敗した可能性があります"); } rename("$tmp$lock","$tmp$file") || &error("書込に失敗した可能性があります"); } sub open_rel { if ($in{'pass'} ne $master) { &header; print "
\n"; print "\n"; print "
■ password? \n"; print "\n"; print "\n"; exit; } open (REL,"> $tmp/rel.html") || &error("rel.htmlが作成できません"); print REL "\n"; print REL "\n"; &style(1); print REL "【処理完了】\n\n\n"; print REL "\n"; print REL "

\[ 新規投稿 \] \[ 一覧/削除 \] \[ 閉じる \]\n"; print REL "

$copy
\n\n"; close (REL); &header; print "
■ 作業フォルダ($tmp)内にrel.html を作成しました。

\n"; print "一度FTP等でダウンロードし、
電光!を表\示するページと同じ階層にrel.html を設置し直してください。

\n"; print "※ rel.html は単体で開くとJavaScriptエラーが発生します\n"; print "\n"; exit; } sub style { # 登録/削除等、別ウィンドウ画面のスタイル設定ルーチン if ($agent =~ /\[.*?\]/i) { $style = "\n"; } else { $style = <<"STL"; STL } if ($_[0]) { print REL $style; } else { print $style; } }