/", $top); $no++; # 連続投稿チェック $flag=0; if ($regCtl == 1) { if ($addr == $ip && $times - $tim < $wait) { $flag=1; } } else if ($regCtl == 2) { if ($times - $tim < $wait) { $flag=1; } } if ($flag) { error("現在投稿制限中です。もうしばらくたってから投稿をお願いします"); } # URL自動リンク if ($autolink) { auto_link($in{'contents'}); } # 重複チェック $flag=0; foreach ($lines as $line) { list($no2,$re,$dat,$nam,$eml,$sub,$com,) = preg_split("/<>/",$line); if ($in{'name'} == $nam && $in{'contents'} == $com) { $flag=1; break; } } if ($flag) { error("重複投稿のため処理を中断しました"); } # 暗証キーを暗号化 if ($in{'pwd'} != "") { $pwd = encrypt($in{'pwd'}); } # 親記事の場合 if ($in{'reno'} == "") { $i=0; $stop=0; $new=Array(); $data=Array(); foreach ($lines as $line) { list($no2,$reno2,) = preg_split("/<>/",$line); $i++; if ($i > $max-1 && $reno2 == "") { $stop=1; } if (!$stop) { array_push($new,$line); } else if ($stop && $pastkey) { array_push($data,$line); } } array_unshift($new,"$no<><>$date<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$host<>$pwd<>{$in['color']}<>{$in['icon']}<>\n"); array_unshift($new,"$no<>$addr<>$times<>\n"); # 過去ログ更新 if (sizeof($data) > 0) { pastlog($data); } # 更新 $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # レス記事の場合:トップソートあり } else if ($in{'reno'} && $topsort) { $f=0; $oyaChk=0; $match=0; $new=Array(); $tmp=Array(); foreach ($lines as $line) { list($no2,$reno2,) = preg_split("/<>/",$line); if ($in{'reno'} == $no2) { if ($reno2) { $f++; break; } $oyaChk++; $match=1; array_push($new,$line); } else if ($in{'reno'} == $reno2) { array_push($new,$line); } else if ($match == 1 && $in{'reno'} != $reno2) { $match=2; array_push($new,"$no<>{$in['reno']}<>$date<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$host<>$pwd<>{$in['color']}<>{$in['icon']}<>\n"); array_push($tmp,$line); } else { array_push($tmp,$line); } } if ($f) { error("不正な返信要求です"); } if (!$oyaChk) { error("親記事が存在しません"); } if ($match == 1) { array_push($new,"$no<>{$in['reno']}<>$date<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$host<>$pwd<>{$in['color']}<>{$in['icon']}<>\n"); } $new = array_merge($new,$tmp); # 更新 array_unshift($new,"$no<>$addr<>$times<>\n"); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # レス記事の場合:トップソートなし } else { $f=0; $oyaChk=0; $match=0; $new=Array(); foreach ($lines as $line) { list($no2,$reno2,) = preg_split("/<>/",$line); if ($in{'reno'} == $no2) { $oyaChk++; } if ($match == 0 && $in{'reno'} == $no2) { if ($reno2) { $f++; break; } $match=1; } else if ($match == 1 && $in{'reno'} != $reno2) { $match=2; array_push($new,"$no<>{$in['reno']}<>$date<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$host<>$pwd<>{$in['color']}<>{$in['icon']}<>\n"); } array_push($new,$line); } if ($f) { error("不正な返信要求です"); } if (!$oyaChk) { error("親記事が存在しません"); } if ($match == 1) { array_push($new,"$no<>{$in['reno']}<>$date<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$host<>$pwd<>{$in['color']}<>{$in['icon']}<>\n"); } # 更新 array_unshift($new,"$no<>$addr<>$times<>\n"); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); } # ロック解除 if ($lockkey) { unlock(); } # クッキー発行 set_cookie($in{'name'},$in['email'],$in{'url'},$in{'pwd'},$in{'icon'},$in{'color'}); # メール処理 if ($mailing == 1 && $in{'email'} != $mailto) { mail_to($no); } else if ($mailing == 2) { mail_to($no); } # リロード if ($location) { if ($ENV{'PERLXS'} == "PerlIS") { header("HTTP/1.0 302 Temporary Redirection\r\n"); header("Content-type: text/html\n"); } header("Location: $location?\n\n"); exit; } else { message('投稿は正常に処理されました'); } } #------------# # 記事削除 # #------------# function dele() { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); # POST限定 if ($postonly && !$post_flag) { error("不正なアクセスです"); } if ($in{'no'} == '' || $in{'pwd'} == '') { error("記事Noまたは暗証キーが入力モレです"); } # ロック処理 if ($lockkey) lock(); $flag=0; $new=Array(); $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach ($lines as $line) { list($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw) = preg_split("/<>/",$line); if ($in{'no'} == $no) { $flag++; $pw2 = $pw; continue; } else if ($in{'no'} == $reno) { continue; } array_push($new,$line); } if (!$flag) { error("該当の記事が見当たりません"); } if ($pw2 == "") { error("暗証キーが設定されていません"); } $check = decrypt($in{'pwd'}, $pw2); if ($check != 1) { error("暗証キーが違います"); } array_unshift($new,$top); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # ロック解除 if ($lockkey) unlock(); # 完了メッセージ message("削除が完了しました"); } #------------# # 記事修正 # #------------# function edit() { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); if ($in{'no'} == '' || $in{'pwd'} == '') { error("記事Noまたは暗証キーが入力モレです"); } # 修正実行 if ($in{'job'} == "edit") { # フォーム入力チェック formCheck('edit'); if ($autolink) { auto_link($in{'contents'}); } # ロック処理 if ($lockkey) lock(); $flag=0; $new=Array(); $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach($lines as $line) { list($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = preg_split("/<>/",$line); if ($in{'no'} == $no) { $flag++; $pw2 = $pw; $line = "$no<>$reno<>$dat<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$hos<>$pw<>{$in['color']}<>{$in['icon']}<>\n"; } array_push($new,$line); } if (!$flag) { error("該当の記事が見当たりません"); } if ($pw2 == "") { error("暗証キーが設定されていません"); } $check = decrypt($in{'pwd'}, $pw2); if ($check != 1) { error("暗証キーが違います"); } array_unshift($new,$top); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # ロック解除 if ($lockkey) unlock(); # 完了メッセージ message("修正が完了しました"); } $flag=0; $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach ($lines as $line) { list($no,$reno,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = preg_split("/<>/",$line); if ($in{'no'} == $no) { $pw2 = $pw; $flag=1; break; } } if (!$flag) { error("該当の記事が見当たりません"); } if ($pw2 == "") { error("暗証キーが設定されていません"); } $check = decrypt($in{'pwd'}, $pw2); if ($check != 1) { error("暗証キーが違います"); } $com = preg_replace("/
/","\n",$com); $pattern = 'https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+'; $com = preg_replace("/($pattern)<\/a>/","$1",$com); if ($ImageView == 1) { headers($headflag,'ImageUp'); } else { headers($headflag); } print << ▽変更する部分のみ修正して送信ボタンを押して下さい。

EOM; form($nam,$eml,$url,'??',$ico,$col,$sub,$com); print << EOM; exit; } #------------# # 完了文言 # #------------# function message($msg) { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); headers($headflag); print <<

$msg


EOM; exit; } #------------# # 入力確認 # #------------# function formCheck($task="") { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); # POST限定 if ($postonly && !$post_flag) { error("不正なアクセスです"); } # spam排除 if (preg_match("/^[a-zA-Z0-9\s]+$/", $in{'sub' })) { exit(); } if (preg_match("/ymra03/" , $in{'contents'})) { exit(); } if (preg_match("/\[URL\]/" , $in{'contents'})) { exit(); } if (preg_match("/^[a-zA-Z0-9\-]+$/", $in{'contents'})) { exit(); } if (preg_match("/Thank/" , $in{'contents'})) { exit(); } if (preg_match("/a href/" , $in{'contents'})) { exit(); } # リンク1つ以上でspamとみなす if (preg_match_all("/http/", $in{'contents'}, $matches) >= 1) { exit(); } # 他サイトからのアクセス排除 if ($task != 'edit' && $baseUrl) { $ref = $_SERVER{'HTTP_REFERER'}; $baseUrl = preg_replace("/(\W)/","\\$1",$baseUrl); if ($ref && !preg_match("/$baseUrl/i",$ref)) { error("不正なアクセスです"); } } # 名前とコメントは必須 if ($in{'name'} == "") { error("名前が入力されていません"); } if ($in{'contents'} == "") { error("コメントが入力されていません"); } if ($in_email && !preg_match("/[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/",$in{'email'})) { error("Eメールの入力内容が正しくありません"); } if ($iconMode) { $ico1s = preg_split("/\s+/", $ico1); $ico2s = preg_split("/\s+/", $ico2); if ($my_icon) { array_push($ico1s,$my_gif); } if (preg_match("/\D/",$in{'icon'}) || $in{'icon'} < 0 || $in{'icon'} > sizeof($ico1s)) { error("アイコン情報が不正です"); } $in{'icon'} = $ico1s[$in{'icon'}]; # 管理アイコンチェック if ($my_icon && $in{'icon'} == $my_gif && $in{'pwd'} != $pass) { error("管理用アイコンは管理者専用です"); } } $col = preg_split("/\s+/", $color); if (preg_match("/\D/",$in{'color'}) || $in{'color'} < 0 || $in{'color'} > sizeof($col)) { error("文字色情報が不正です"); }else{ $tmp = $in['color']; $in{'color'} = $col[$tmp]; } # URL if ($in{'url'} == "http://") { $in{'url'} = ""; } } #--------------# # 管理モード # #--------------# function admin() { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); if ($in{'pass'} == "") { enter(); } else if ($in{'pass'} != $pass) { error("パスワードが違います"); } # 修正画面 if ($in{'job'} == "edit" && $in{'no'}) { $num = $in{'no'}; $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach ($lines as $line) { $f = preg_split("/<>/",$line); if ($f[0] == $num[0]) { break; } } # 修正フォーム edit_form($f); # 修正実行 } else if ($in{'job'} == "edit2" && $in{'no'}) { if ($in{'url'} == "http://") { $in{'url'} = ''; } $cols = preg_split("/\s+/", $color); $ico1s = preg_split("/\s+/", $ico1); if ($my_icon) { array_push($ico1s,$my_gif); } $in{'icon'} = $ico1s[$in{'icon'}]; # URL自動リンク if ($autolink) { auto_link($in{'contents'}); } # ロック開始 if ($lockkey) { lock(); } $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); $new=Array(); foreach ($lines as $line) { list($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = preg_split("/<>/",$line); if ($no == $in{'no'}) { $line="$no<>$re<>$dat<>{$in['name']}<>{$in['email']}<>{$in['sub']}<>{$in['contents']}<>{$in['url']}<>$hos<>$pw<>{$cols[$in['color']]}<>{$in['icon']}<>\n"; } array_push($new,$line); } # 更新 array_unshift($new,$top); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # ロック解除 if ($lockkey) { unlock(); } # 削除 } else if ($in{'job'} == "dele" && $in{'no'}) { # ロック開始 if ($lockkey) { lock(); } # 削除情報をマッチング $new=Array(); $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach ($lines as $line) { $flag=0; list($no,$re,) = preg_split("/<>/",$line); foreach ($in{'no'} as $del) { if ($no == $del || $re == $del) { $flag=1; break; } } if ($flag == 0) { array_push($new,$line); } } # 更新 array_unshift($new,$top); $out = fopen($logfile,"w") or error("Write Error: $logfile"); fputs($out,implode("",$new)); fclose($out); # ロック解除 if ($lockkey) { unlock(); } } headers($headflag); print <<
  • 処理を選択し、記事をチェックして送信ボタンを押して下さい。
  • 親記事を削除するとレス記事も一括して削除されます。
EOM; $pastView *= 2; $i=0; $lines = file($logfile) or error("Open Error: $logfile"); $top = array_shift($lines); foreach ($lines as $line) { list($no,$res,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,) = preg_split("/<>/",$line); if ($res == "") { $i++; } if ($i < $page + 1) { continue; } if ($i > $page + $pastView) { continue; } if ($eml) { $nam = "$nam"; } $com = preg_replace("/<[^>]*(>|$)/","",$com); if (strlen($com) > 40) { $com = substr($com,0,40) . "..."; } # 削除チェックボックス if (!$res) { print "

"; } else { print "
"; } print ""; print "[$no] $sub\n"; print "投稿者:$nam 投稿日:$dat 【{$hos}】\n"; print "
$com
\n"; } print <<
EOM; $next = $page + $pastView; $back = $page - $pastView; print "

\n"; if ($back >= 0) { print "\n"; } if ($next < $i) { print "\n"; } print <<
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "
EOM; exit; } #------------# # 修正画面 # #------------# function edit_form($arg) { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); list($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = $arg; $com = preg_replace("/
/","\n",$com); if ($ImageView == 1) { headers($headflag,'ImageUp'); } else { headers($headflag); } print << ▽変更する部分のみ修正して送信ボタンを押して下さい。

EOM; form($nam,$eml,$url,'??',$ico,$col,$sub,$com); print << EOM; exit; } #------------# # 入室画面 # #------------# function enter() { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); headers($headflag); print <<

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

EOM; exit; } #------------# # 時間取得 # #------------# function get_time(&$times,&$date) { $times = time(); list($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($times); $week = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 日時のフォーマット $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); } #--------------# # メール送信 # #--------------# function mail_to($no) { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); get_time($times,$date); # 記事の改行・タグを復元 $com = $in{'contents'}; $com = preg_replace("/
/","\n",$com); $com = preg_replace("/</","<",$com); $com = preg_replace("/>/",">",$com); $com = preg_replace("/"/","\"",$com); $com = preg_replace("/&/","&",$com); # メール本文を定義 $mbody = <<$2",$arg); } #----------------# # 過去ログ生成 # #----------------# function pastlog($data) { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); # 過去ログNoファイル $fd = fopen($nofile,"r") or error("Open Error: $nofile"); $count = fread($fd,filesize($nofile)); fclose($fd); $pastfile = sprintf("%s%04d.php", $pastdir,$count); # 過去ログを開く $i=0; $f=0; $past = Array(); $lines = file($pastfile); foreach ($lines as $line) { $i++; array_push($past,$line); if ($i >= $pastmax) { $f++; break; } } # 規定の行数をオーバーすると次ファイルを自動生成 if ($f) { # カウントファイル更新 $fd = fopen($nofile,"w") or error("Write Error: $nofile"); fputs($fd,++$count); fclose($fd); $pastfile = sprintf("%s%04d.php", $pastdir,$count); $past = $data; } else { $past = array_merge($past,$data); } # 過去ログ更新 $fd = fopen("$pastfile","w+") or error("Write Error: $pastfile"); fputs($fd,implode("",$past)); fclose($fd); if ($f) { chmod($pastfile,0666); } } #------------# # 過去ログ # #------------# function past() { global $in,$post_flag,$page,$mode,$lockflag,$headflag,$host,$addr; require ('./bbs/set.php'); $lines = file($nofile) or error("Open Error: $nofile"); $no = array_shift($lines); $in{'pastlog'} = preg_replace("/\D/","",$in{'pastlog'}); if (!$in{'pastlog'}) { $in{'pastlog'} = $no; } headers($headflag); print <<
過去ログ
キーワード 条件 表示
EOM; $file = sprintf("%s%04d.php", $pastdir,$in{'pastlog'}); # 検索処理 if ($in{'word'} != "") { list($i,$next,$back) = search($file,$in{'word'},$in{'view'},$in{'cond'}); $enwd = urlencode($in{'word'}); if ($back >= 0) { print "[前の{$in['view']}件]\n"; } if ($next < $i) { print "[次の{$in['view']}件]\n"; } print << HTML_END; exit; } print "
\n"; $i=0; $lines = @file($file);# or error("Open Error: $file"); foreach ($lines as $line) { list($no,$re,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$col,$ico) = preg_split("/<>/",$line); if ($re == "") { $i++; } if ($i < $page + 1) { continue; } if ($i > $page + $pastView) { continue; } if ($eml) { $nam = "$nam"; } if ($url) { $url = "<URL>"; } if ($re == "") { print "

"; } else { print "
"; } print "$sub  $nam - $dat $url No.$no

\n"; if ($ico) { print "
$com

\n"; } else { print "
$com
\n"; } } print <<
EOM; # ページ移動ボタン表示 if ($page - $pastView >= 0 || $page + $pastView < $i) { mvbtn($in,"$regist?mode=past&pastlog={$in['pastlog']}&page=", $i, $pastView); } print << EOM; exit; } __END__