'; //cssファイルの読み込み include "$css"; echo ' '; } #------------------# # フォーム部分 # #------------------# function form ($type = '', $no = '', $reno = '', $name = '', $mail = '', $url1 = '', $url2 = '', $subject = '', $comment = '', $tail1 = '', $tail2 = '', $pass = '', $solflg = '', $reno2 = '', $fno = '') { global $tblsize , $script , $homepage , $target , $pastkey , $ResImage; global $UpUrl , $list; global $doubleurl , $formurl1 , $formurl2 , $ok_file1 , $ok_file2 , $maxsize; //クッキー取得 list($ck_name, $ck_mail, $ck_url1, $ck_url2, $ck_pw) = explode(",", $_COOKIE['pforum']); $ck_name = stripslashes($ck_name); if ($_POST['sub']) { $subject = "Re:". $_POST['sub']; } if ($type != "res") { //ヘッダを出力 head(); //タイトルを表示 // title(); } echo '
'; if ($type == "edit") { echo ' '; } elseif ($type == "res") { echo ' '; } else { echo ' '; } echo ' '; if ($type == "" || $type == "edit") { echo ' '; } echo ' '; if ($doubleurl) { echo ' '; } echo ' '; if ($type != "edit") { echo ' '; } echo '
« back
'; if ($type == "edit") { $ck_name = $name; $ck_mail = $mail; $ck_url1 = $url1; $ck_url2 = $url2; $ck_pw = $pass; $form_title = "edit form"; } elseif ($type == "res") { $form_title = "res form"; } else { $form_title = "write form"; } echo '

'. $form_title. '

'; if ($type == "edit") { echo '修正後、Writeボタンを押してください

'; } echo '
name
mail
'. $formurl1. '
'. $formurl2. '
subject
message
 
password
Solved! '; if ($solflg) { $check = " checked"; } else { $check = ""; } echo ' 解決した場合はチェックを入れてください。

'; if ($type == "edit") { echo ' '; } ?> + P forum + '; } #----------------# # ログ書込み # #----------------# function reg() { global $log , $logcnt , $logdir , $maxdata , $script , $pastkey , $pastdir , $pcntfile , $plogmax; global $topsort , $PastImage , $UpDir , $list , $past; global $sendmail , $adreg , $AdminMail , $version; global $deny; //投稿エラーチェック regchk(); //アクセス制限 reg_limit_chk(); //現在日時を取得(GMTから日本時間へ変更) $time = time() + 9 * 60 * 60; $nowdate = gmdate("Y/m/d(D) G:i:s", $time); //ログカウントファイルを格納 $logcntlogall = file_ex($logcnt, 1); //前カウントを格納 $no = $logcntlogall[0]; //次カウントを決定 if (empty($no)) { $no = 1; } else { $no++; } fp(1, $logcnt, $no); //インデックスログファイルをすべて格納 $logall = file_ex($log); //文字整形 $dcomment = $_POST['comment']; $durl1 = $_POST['url1']; $durl2 = $_POST['url2']; $dmail = $_POST['mail']; $dsubject = $_POST['subject']; $dname = $_POST['name']; $dpass = $_POST['pass']; $dreno = $_POST['reno']; $dreno2 = $_POST['reno2']; $dsolflg = $_POST['solflg']; $dcomment = htmlspecialchars(convert($dcomment)); $dcomment = str_replace("\r\n", "\r", $dcomment); $dcomment = str_replace("\r", "\n", $dcomment); $dcomment = str_replace("\n", "
", $dcomment); $durl1 = str_replace("http://", "" , $durl1); $durl2 = str_replace("http://", "" , $durl2); $dname = htmlspecialchars(convert($dname)); $dmail = htmlspecialchars($dmail); $durl1 = htmlspecialchars($durl1); $durl2 = htmlspecialchars($durl2); $dsubject = htmlspecialchars(convert($dsubject)); //クッキー用に暗号化前パスワードを退避 $wkck_pass = $dpass; $dpass = md5($dpass); //不要なバックスラッシュを削除 if(get_magic_quotes_gpc()){ $dcomment = stripslashes($dcomment); $dsubject = stripslashes($dsubject); $dname = stripslashes($dname); } //IP等々取得 $ip = getenv("REMOTE_ADDR"); if (empty($ip)) { $ip = $_SERVER["REMOTE_ADDR"]; } $host = getenv("REMOTE_HOST"); if (empty($host)) { $host = $_SERVER["REMOTE_HOST"]; } if (empty($host)) { $host = gethostbyaddr($ip); } $useragent = getenv("HTTP_USER_AGENT"); if (empty($useragent)) { $useragent = $_SERVER["HTTP_USER_AGENT"]; } //解決フラグを整形 $dsolflg ? 1 : 0; //ファイルアップロード処理(戻り値($tailの配列)を$upへ格納)) if ($_FILES['file1']['name'] || $_FILES['file2']['name']) { if ($_FILES['file1']['name']) { $filename1 = $_FILES['file1']['name']; $filetype1 = $_FILES['file1']['type']; } if ($_FILES['file2']['name']) { $filename2 = $_FILES['file2']['name']; $filetype2 = $_FILES['file2']['type']; } //アップロード処理 $up = fileup($no); $up1 = $up[0]; $up2 = $up[1]; } if (!empty($dreno2)) { $regreno = $dreno2; } else { $regreno = $dreno; } //インデックス用記事を格納 if (empty($dreno)) { $newidx = "$no<>$dsubject<>$dname<>$dname<>$nowdate<>$nowdate<>$dsolflg<>0<>0<>0<>$ip<>\n"; } else { for ($i = 0; $i < count($logall); $i++) { list($ino, $isubject, $iname, $ilastname, $idate, $ilastdate, $isolflg, $idelflg, $iregcnt, $iviewcnt, $iip) = explode("<>", $logall[$i]); if ($ino == $dreno) { $iregcnt++; $edtlog = "$ino<>$isubject<>$iname<>$dname<>$idate<>$nowdate<>$dsolflg<>$idelflg<>$iregcnt<>$iviewcnt<>$ip<>\n"; if (!$topsort) { $logall[$i] = $edtlog; } else { $logall[$i] = ""; } } } if ($topsort) { array_unshift($logall, $edtlog); } } //ログファイルを決定 if ($dreno) { $dlog = $logdir. $dreno. ".php"; } else { $dlog = $logdir. $no. ".php"; } $dlogall = file_ex($dlog); //書込みログ配列 $new = array(); if (!$list) { $dreno2 = $dreno; } //親記事 if (empty($dreno)) { $newdata = "$no<>$regreno<>0<>$dname<>$dmail<>$durl1<>$durl2<>$dsubject<>$dcomment<>$up1<>$up2<>$dpass<>$nowdate<>$time<>$dsolflg<>0<>$ip<>\n"; array_unshift($new,$newdata); //レス記事 } else { $match=0; for ($i = 0; $i < count($dlogall); $i++){ list($no2, $reno2, $sp2) = explode("<>", $dlogall[$i]); if ($match == 0 && $dreno2 == $no2) { $match=1; $space = $sp2 + 1; } elseif ($match == 1 && $dreno2 != $reno2 && $sp2 < $space) { $newdata = "$no<>$regreno<>$space<>$dname<>$dmail<>$durl1<>$durl2<>$dsubject<>$dcomment<>$up1<>$up2<>$dpass<>$nowdate<>$time<>$dsolflg<>0<>$ip<>\n"; $match=2; array_push($new, $newdata); } array_push($new, $dlogall[$i]); } if ($match == 1) { $newdata = "$no<>$regreno<>$space<>$dname<>$dmail<>$durl1<>$durl2<>$dsubject<>$dcomment<>$up1<>$up2<>$dpass<>$nowdate<>$time<>$dsolflg<>0<>$ip<>\n"; array_push($new,$newdata); } } //ヘッダ追加 fp (0, $dlog, $new); if (empty($dreno)) { //インデックスデータ追加 array_unshift($logall, $newidx); } //ログの数を採取 $logcount = count($logall); //記事数調整 if ($logcount > $maxdata + 1) { if ($pastkey) { //超えた記事を格納 $plog = array_pop($logall); $pcnt = file_ex($pcntfile, 1); $pno = $pcnt[0]; //過去ログファイルを決定 $pfile = $pastdir. $pno. ".php"; $plogall = file_ex($pfile); } else { $plogall = array(); } //現在の過去ログファイルの行数を確認 $pallcnt = count($plogall); //過去ログ行数がmaxを超えていたら別ファイルを作成 if ($pallcnt > $plogmax) { $pno = $pno + 1; fp(1, $pcntfile, $pno); $plogall = array(); $pfile = $pastdir. $pno. ".php"; } //過去ログファイルへ超えた記事を格納 array_unshift($plogall, $plog); fp(0, $pfile, $plogall); //古い記事を削除 array_pop($logall); } //ヘッダ追加 fp(0, $log, $logall); //クッキー発行 set_cook($wkck_pass); //メール送信 if ($sendmail) { if ($adreg || (!$adreg && $dmail != $AdminMail)) { $boundary = "pforum" . md5(uniqid(rand(),1)); if ($up1) { $fup = fopen("$UpDir$no-1$up1", "r"); $content = fread($fup,filesize("$UpDir$no-1$up1")); fclose($fup); $fileenc1 = chunk_split(base64_encode($content)); } if ($up2) { $fup = fopen("$UpDir$no-2$up2", "r"); $content = fread($fup,filesize("$UpDir$no-2$up2")); fclose($fup); $fileenc2 = chunk_split(base64_encode($content)); } //メールのために再整形 $dcomment = str_replace("
", "\n", $dcomment); $dcomment = str_replace("
", "\n", $dcomment); $dcomment = str_replace("<", "<", $dcomment); $dcomment = str_replace(">", ">", $dcomment); $dname = str_replace("
", "\n", $dname); $dname = str_replace("
", "\n", $dname); $dname = str_replace("<", "<", $dname); $dname = str_replace(">", ">", $dname); $dsubject = str_replace("
", "\n", $dsubject); $dsubject = str_replace("
", "\n", $dsubject); $dsubject = str_replace("<", "<", $dsubject); $dsubject = str_replace(">", ">", $dsubject); $to = $AdminMail; if ($dsolflg) { $sol = "解決済み!"; } else { $sol = "未解決"; } if ($dmail) { $from = $dmail; } else { $from = $AdminMail; } //半角を全角そしてJISに変換 $subject = mailconvert("[$no]$dubject"); $name = mailconvert($dname); //題名・名前はBエンコード $subject = "=?iso-2022-jp?B?". base64_encode($dsubject). "?="; $name = "=?iso-2022-jp?B?". base64_encode($dname). "?="; $filename1 = "=?iso-2022-jp?B?". base64_encode($filename1). "?="; $filename2 = "=?iso-2022-jp?B?". base64_encode($filename2). "?="; $header = "From: $name <". $from .">\n"; $header .= "Reply-To: ". $from ."\n"; $header .= "X-Mailer: PHP/". phpversion(). " & Pforum $version by rocomotion". "\n"; $header .= "MIME-version: 1.0\n"; if ($up1 || $up2) { $header .= "Content-Type: multipart/mixed;"; $header .= "boundary=\"$boundary\"\n"; $body .= "--$boundary\n"; $body .= "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; $body .= "Content-transfer-encoding: 7bit\n\n"; } else { $header .= "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; $header .= "Content-transfer-encoding: 7bit\n\n"; } $msg = "date :" . $nowdate ."\n"; $msg .= "host(IP):" . $host . "(" . $addr . ")" . "\n"; $msg .= "browser :" . $useragent . "\n"; $msg .= "name :" . $dname . "\n"; $msg .= "mail :" . $dmail . "\n"; $msg .= "url1 :http://" . $durl1 . "\n\n"; $msg .= "url2 :http://" . $durl2. "\n\n"; $msg .= "subject :" . $dsubject . "\n"; $msg .= "solved : " . $sol . "\n"; $msg .= "message :\n" . $dcomment."\n"; $msg2 = mailconvert($msg); $body .= $msg2; if ($up1) { $body .= "--$boundary\n"; $body .= "Content-Type: ".$filetype1.";\n"; $body .= "name=\"$filename1\"\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename=\"$filename1\"\n\n"; $body .= "$fileenc1\n"; } if ($up2) { $body .= "--$boundary\n"; $body .= "Content-Type: ".$filetype2.";\n"; $body .= "name=\"$filename2\"\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename=\"$filename2\"\n\n"; $body .= "$fileenc2\n"; } if ($up1 || $up2) { $body .= "--$boundary--"; } mail($to, $subject , $body , $header); } } //TOPへ戻す header("Location: $script?l=$list"); } #----------------------# # ログ一覧表示部分 # #----------------------# function view() { global $log , $logdir , $script , $cntfile , $title , $tblsize , $maxview , $dcolor , $cntsize , $cntcol , $cntfont , $sub_len; global $tgifw , $tgifh , $tcolor , $tsize , $mcolor , $rmcolor , $msize , $ncolor , $nsize , $UpUrl , $list , $past , $pcntfile , $pastdir , $homepage , $new_t , $target; global $displogno; //ログファイルチェック if (!file_exists($log)) { error("$log が見つかりません。"); exit; } if (!is_writable($log)) { error("$log に書き込みができません。"); exit; } if (!empty($_POST['page'])) { $pg = $_POST['page']; } else { $pg = $_GET['page']; } //ヘッダを表示 head(); //カウントファイルを開く $wkcnt = file_ex($cntfile, 1); //カウントを格納 list($cno, $ip) = explode("<>", $wkcnt[0]); //IP取得 $chkaddr = getenv("REMOTE_ADDR"); if (empty($chkaddr)) { $chkaddr = $_SERVER["REMOTE_ADDR"]; } if ($chkaddr != $ip) { $cno++; $fpcnt = "$cno<>$chkaddr<>"; fp(1, $cntfile, $fpcnt); } //過去ログカウントファイルを指定 $pcnt = file_ex($pcntfile, 1); //過去ログカウントを格納 $pno = $pcnt[0]; //折りたたみ記事No $dno = $_GET['dispno']; echo '
'; $cno = sprintf("%05d", $cno); echo ' '. $cno. '
'; if (!$tgif) { echo $title; } else { echo ''; } echo '
検索
'; if (!empty($past)) { echo '
過去ログ
'; } echo '
home   ::   新規書込 '; if ($list) { echo '   ::   スレッド表示 '; } else { echo '   ::   リスト表示 '; } if ($past) { echo '   ::   現行ログ '; } else { echo '   ::   過去ログ '; } echo '
'; if (empty($past)) { //インデックスログファイルをすべて格納 $logall = file_ex($log); } else { //過去ログファイルを格納 $pastfile = $pastdir. $past. ".php"; $logall = file_ex($pastfile); } if ($list) { echo ' '; } else { echo '
subject name date no flag
'; } //ログを出力 for ($i = 0; $i < count($logall); $i++) { list($ino, $isubject, $iname, $ilastname, $idate, $ilastdate, $isolflg, $idelflg, $iregcnt, $iviewcnt, $iip) = explode("<>", $logall[$i]); $j++; if ($j < $pg + 1) { continue; } if ($j > $pg + $maxview) { continue; } //subject変換 if (strlen($isubject) > $sub_len * 2) { $isubject = substr($isubject, 0, $sub_len * 2); $isubject .= ".."; } if ($list) { //リスト表示用 $listlog = $logdir. $ino. ".php"; $listlogall = file_ex($listlog); for ($k = 0; $k < count($listlogall); $k++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $listlogall[$k]); if ($displogno != 0) { if ($k > $displogno && $dno != $ino) { echo ' '; break; } } if ($mdelflg) { $msubject = "削除済み"; $mname = "削除済み"; } //subject変換 if (strlen($msubject) > $sub_len * 2) { $msubject = substr($msubject, 0, $sub_len * 2); $msubject .= ".."; } //親記事と子記事で背景色を変化 if (empty($mreno)) { $class = "listtop"; } else { $class = "listres"; } echo ' '; } } else { if (!$idelflg) { $cnt++; if ($cnt%2) { $class = "thread1"; } else { $class = "thread2"; } echo ' '; } } } echo '
no subject name time last res view
...more ( last updated at '. $ilastdate. ' )  
'; if (!$mdelflg) { if (!$mspace) { echo ''; } echo ' '; } $space = ""; if (!$mspace) { echo '★ '. $msubject; } else { for ($sp = 0; $sp < $mspace; $sp++) { $space .= '  '; } echo $space. '→ '. $msubject; } if (!$mdelflg) { echo ''; } echo ' '. $mname. ' '. $mdate; $ntime = time() + 9 * 60 * 60; if ($ntime - $mtime < $new_t * 60 * 60) { echo ' new!'; } echo ' '. $mno. ' '; if ($msolflg) { echo '解決済!'; } else { echo ' '; } echo '
'. $ino. ' '. $isubject. ' '. $iname.' '. $idate. ' '. $ilastdate. '
 by '. $ilastname; if ($isolflg) { echo '済!'; } echo '
'. $iregcnt. ' '. $iviewcnt. '
'; //next,backボタン表示の設定 $next = $pg + $maxview; $back = $pg - $maxview; $p_page=0; echo '
'; if ($next < $j) { $p_flag=1; echo ' '; } echo '
'; if ($back >= 0) { $p_flag=1; echo '
'; } else { echo ' '; } echo '
'; //ページ移動ボタン表示 if ($p_flag) { $x = 1; $y = 0; while ($i > 0) { if ($pg == $y) { echo '['. $x. ']'; } else { echo '['. $x. ']'; } $x++; $y = $y + $maxview; $i = $i - $maxview; } } echo '

'; foot(); } #------------------------# # メインログ表示部分 # #------------------------# function viewmain() { global $log , $logdir , $script , $cntfile , $title , $tblsize , $maxview , $dcolor , $cntsize , $cntcol , $cntfont , $sub_len; global $tgif , $tgifw , $tgifh , $tcolor , $tsize , $mcolor , $rmcolor , $msize , $ncolor , $nsize , $UpUrl , $list , $past , $pastdir; global $formurl1 , $formurl2 ,$solvedform , $new_t; global $mview; //ログファイルチェック if (!file_exists($log)) { error("$log が見つかりません。"); exit; } if (!is_writable($log)) { error("$log に書き込みができません。"); exit; } $num = $_GET['no']; $num2 = $_GET['no2']; $sflg = $_GET['s']; $pg = $_GET['page']; $tpg = $_GET['thispage']; //折りたたみ記事No $dno = $_GET['dispno']; //閲覧カウントアップ if (!empty($past)) { $log = $pastdir. $past. ".php"; } $logall = file_ex($log); for ($i = 0; $i < count($logall); $i++) { list($ino, $isubject, $iname, $ilastname, $idate, $ilastdate, $isolflg, $idelflg, $iregcnt, $iviewcnt, $iip) = explode("<>", $logall[$i]); if ($ino == $num) { $iviewcnt++; $logall[$i] = "$ino<>$isubject<>$iname<>$ilastname<>$idate<>$ilastdate<>$isolflg<>$idelflg<>$iregcnt<>$iviewcnt<>$iip<>\n"; break; } } fp(0, $log, $logall); //ヘッダを表示 head(); //タイトルを表示 title(); $dlog = $logdir. $num. ".php"; //インデックスログファイルをすべて格納 $dlogall = file_ex($dlog); echo '
'; if($sflg) { echo '« back'; } else { echo '« back'; } echo '

'; //ログを出力 $displog = 0; for ($i = 0; $i < count($dlogall); $i++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $dlogall[$i]); if (($list && $num2 == $mno) || (!$list && !$mdelflg)) { if ($mreno != 0) { $displog++; if (!$list) { if ($displog < $tpg + 1) { continue; } if ($displog > $tpg + $mview) { continue; } } } //リスト表示のときのみ引用 if ($list) { $fcomment = ">".$mcomment; $fcomment = str_replace("
", "\n>", $fcomment); $fcomment = str_replace("
", "\n>", $fcomment); } $mcomment = preg_replace("/([\>]|^)(>[^<]*)/","$1$2",$mcomment); $mcomment = autolink($mcomment); //整形 if ($mmail) { $mmail = '[mail]'; } if ($murl1) { $murl1 = '['. $formurl1. ']'; } if ($murl2) { $murl2 = '['. $formurl2. ']'; } if ($mtail1) { $mtail1 = '[F1('. $mtail1. ')]'; } if ($mtail2) { $mtail2 = '[F2('. $mtail2. ')]'; } if ($list || $i==0) { echo ''; if ($list) { $class = "listsub"; } else { $class = "mainsub"; } $f_subject = "Re:". $msubject; } else { $class = "ressub"; } if ($list || (!$list && !$mdelflg)) { echo ' '; if (empty($past) && ($msolflg || !$isolflg || $solvedform == 0)) { echo ' '; } } } if (!$list && $i == 0) { echo '
['. $mno. ']'. $msubject. ' '. $mdate. '
name : '. $mname. ' '.$mmail. ' '. $murl1. ' '. $murl2. ' '. $mtail1. ' '. $mtail2. '
'. $mcomment. '
'; if (!empty($past)) { if ($msolflg) { echo '  status : 解決済!   '; } else { echo ' '; } } echo '
'; if ($msolflg) { echo '  status : 解決済!'; } else { echo ' '; } echo '
pass :

'; } } echo '

'; if ($list) { echo '

list

'; //リスト表示用 for ($k = 0; $k < count($dlogall); $k++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $dlogall[$k]); //親記事と子記事で背景色を変化 if ($num2 == $mno) { $class = "listnow"; } elseif(empty($mreno)) { $class = "listtop"; } else { $class = "listres"; } if ($mdelflg) { $msubject = "削除済み"; $mname = "削除済み"; } echo ' '; } echo '
subject name date no flag
'; if (!$mdelflg) { echo ''; } $space = ""; if (!$mspace) { echo '★ '. $msubject; } else { for ($sp = 0; $sp < $mspace; $sp++) { $space .= '  '; } echo $space. '→ '. $msubject; } if (!mdelflg) { echo ''; } echo ' '. $mname. ' '. $mdate; $ntime = time() + 9 * 60 * 60; if ($ntime - $mtime < $new_t * 60 * 60) { echo ' new!'; } echo ' '. $mno. ' '; if ($msolflg) { echo '解決済!'; } else { echo ' '; } echo '
'; } echo '
'; //スレッド表示の場合にページング if (!$list) { //next,backボタン表示の設定 $next = $tpg + $mview; $back = $tpg - $mview; $p_page=0; if ($back >= 0) { $p_flag = 1; } if ($next < $displog) { $p_flag = 1; } echo '
'; //ページ移動ボタン表示 if ($p_flag) { $x = 1; $y = 0; while ($displog > 0) { if ($tpg == $y) { echo '['. $x. ']'; } else { echo '['. $x. ']'; } $x++; $y = $y + $mview; $displog = $displog - $mview; } } echo '
'; } if (empty($past) && (!$solvedform || ($solvedform && !$msolflg))) { form("res", "", $num, "", "", "", "", $f_subject, $fcomment, "", "", "", "", $num2, ""); } else { echo '
'; if ($past) { echo '過去ログのためこれ以上の返信はできません。'; } elseif ($solvedform && $msolflg) { echo '解決済みのためこれ以上の返信はできません。'; } echo '

'; } foot(); exit; } #------------------------# # パスワードチェック # #------------------------# function passchk() { global $password; if ($_POST['pass'] == $password) { return; } else { error("パスワードが違います"); exit; } } #------------------------# # 投稿エラーチェック # #------------------------# function regchk() { if (empty($_POST['name'])) { error("nameが入力されていません。"); exit; } if (empty($_POST['comment'])) { error("messageが入力されていません。"); exit; } if (empty($_POST['subject'])) { $_POST['subject'] = "no title"; } } #--------------# # 記事修正 # #--------------# function edit() { global $script , $log , $logdir , $password , $UpDir , $list; $num = $_POST['no']; $num2 = $_POST['no2']; $dcomment = $_POST['comment']; $durl1 = $_POST['url1']; $durl2 = $_POST['url2']; $dname = $_POST['name']; $dmail = $_POST['mail']; $dsubject = $_POST['subject']; $dsolflg = $_POST['solflg'] ? 1 : 0; $dpass = $_POST['pass']; $pg = $_POST['page']; //Noチェック if (empty($_POST['no'])) { error("Noが記入されていません。"); exit; } if ($_POST['action'] == "editreg") { regchk(); reg_limit_chk(); } //メインログファイルを指定 $dlog = $logdir. $_POST['no']. ".php"; $dlogall = file_ex($dlog); $findflg=0; if ($_POST['action'] == "editreg") { //文字整形 $dcomment = htmlspecialchars($dcomment); $dcomment = str_replace("\r\n", "\r", $dcomment); $dcomment = str_replace("\r", "\n", $dcomment); $dcomment = str_replace("\n", "
", $dcomment); $durl1 = str_replace("http://", "" , $durl1); $durl2 = str_replace("http://", "" , $durl2); $dname = htmlspecialchars(convert($dname)); $dmail = htmlspecialchars($dmail); $durl1 = htmlspecialchars($durl1); $durl2 = htmlspecialchars($durl2); $dsubject = htmlspecialchars(convert($dsubject)); //不要なバックスラッシュを削除 if(get_magic_quotes_gpc()){ $dname = stripslashes($dname); $dsubject = stripslashes($dsubject); $dcomment = stripslashes($dcomment); } } //ログから修正記事を見つける & 修正 for ($i = 0; $i < count($dlogall); $i++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $dlogall[$i]); if ($num2 == $mno) { if ($_POST['action'] != "editreg") { if ((md5($dpass) == $mpass && !empty($dpass)) || $dpass == $password) { $findflg = 1; break; } } else { if ($_POST['delflg1'] == "on") { @unlink("$UpDir$mno-1$mtail1"); } $mtail1 = ""; } if($_POST['delflg2'] == "on") { @unlink("$UpDir$mno-2$mtail2"); } $mtail2 = ""; //ファイルアップロード処理(戻り値($tail,$W,$H)は$upimageへ格納)) if ($_FILES['file1']['name']) { @unlink("$UpDir$mno-1$mtail1"); $mtail1 = ""; } else { $tail1 = $mtail1; } if ($_FILES['file2']['name']) { @unlink("$UpDir$mno-2$mtail2"); $mtail2 = ""; } else { $tail2 = $mtail2; } if ($_FILES['file1']['name'] || $_FILES['file2']['name'] ) { $up = fileup($num2); $up1 = $up[0]; $up2 = $up[1]; } //空であれば元のデータを入れる if (!empty($up1)) { $tail1 = $up1; } if (!empty($up2)) { $tail2 = $up2; } $dlogall[$i] = "$mno<>$mreno<>$mspace<>$dname<>$dmail<>$durl1<>$durl2<>$dsubject<>$dcomment<>$tail1<>$tail2<>$mpass<>$mdate<>$mtime<>$dsolflg<>$mdelflg<>$mip<>\n"; //インデックスログファイルをすべて格納 if($num == $num2) { $logall = file_ex($log); for ($j = 0; $j < count($logall); $j++) { list($ino, $isubject, $iname, $ilastname, $idate, $ilastdate, $isolflg, $idelflg, $iregcnt, $iviewcnt, $iip) = explode("<>", $logall[$j]); if ($ino == $num) { if ($ilastname == $dname) { $lastname = $dname; } else { $lastname = $ilastname; } $logall[$j] = "$ino<>$dsubject<>$dname<>$lastname<>$idate<>$ilastdate<>$dsolflg<>$idelflg<>$iregcnt<>$iviewcnt<>$iip<>\n"; } } fp(0, $log, $logall); } } } if ($_POST['action'] == "editreg") { fp(0, $dlog, $dlogall); //クッキー取得 list($ck_name, $ck_mail, $ck_url1, $ck_url2, $ck_pw) = explode(",", $_COOKIE['pforum']); $wkck_pass = $ck_pw; if ($wkck_pass != $password) { //クッキー発行 set_cook($wkck_pass); } //TOPへ戻す $url = $script. '?l='. $list. '&page='. $pg; header("Location: $url"); } //該当記事番号が存在しなければエラーを表示 if (!$findflg) { error("該当記事が存在しないかパスワードが違います。"); exit; } //メッセージの
を改行マークへ変更 $mcomment = str_replace("
", "\n", $mcomment); $mcomment = str_replace("
", "\n", $mcomment); form("edit", $mno, $mreno, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $msolflg, "", $num); foot(); exit; } #--------------# # 記事削除 # #--------------# function del() { global $script , $log , $logdir , $password , $UpDir , $list; $num = $_POST['no']; $num2 = $_POST['no2']; $dpass = $_POST['pass']; //メインログファイルを指定 $dlog = $logdir. $num. ".php"; $dlogall = file_ex($dlog); $delflg=0; //削除する記事を発見したらその記事の削除フラグを立てる for ($i = 0; $i < count($dlogall); $i++){ list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $dlogall[$i]); if ($num2 == $mno) { if ((md5($dpass) == $mpass && !empty($dpass)) || $dpass == $password) { //添付ファイル削除処理 @unlink("$UpDir$mno-1$tail1"); @unlink("$UpDir$mno-2$tail2"); $dlogall[$i] = "$mno<>$mreno<>$mspace<>$mname<>$mmail<>$murl1<>$murl2<>$msubject<>$mcomment<>$mtail1<>$mtail2<>$mpass<>$mdate<>$mtime<>$msolflg<>1<>$mip<>\n"; $delflg = 1; //親記事ならインデックスファイルにも削除フラグを立てる if (empty($mreno)) { $logall = file_ex($log); for ($j = 0; $j < count($logall); $j++) { list($ino, $isubject, $iname, $ilastname, $idate, $ilastdate, $isolflg, $idelflg, $iregcnt, $iviewcnt, $iip) = explode("<>", $logall[$j]); if ($ino == $num) { $logall[$j] = "$ino<>$isubject<>$iname<>$ilastname<>$idate<>$ilastdate<>$isolflg<>1<>$iregcnt<>$iviewcnt<>$iip<>\n"; } } fp (0, $log, $logall); } } } } if (!$delflg) { error("該当記事が存在しないかパスワードが違います。"); exit; } fp(0, $dlog, $dlogall); //TOPへ戻す $url = $script. "?l=". $list; header("Location: $url"); } #-------------------# # URLオートリンク # #-------------------# function autolink($comment) { $comment = preg_replace("/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/","\\1\\2",$comment); return $comment; } #----------# # エラー # #----------# function error($err_msg) { head(); title(); echo '
Error!

'. $err_msg. '

back

'; foot(); return; } #--------------# # クッキー発行 # #--------------# function set_cook($wkck_pass) { $url1 = str_replace("http://", "", $_POST['url1']); $url2 = str_replace("http://", "", $_POST['url2']); $cookvalue = implode(",", array($_POST['name'], $_POST['mail'], $url1, $url2, $wkck_pass)); setcookie ("pforum", $cookvalue, time() + 30 * 24 * 3600); return $wkck_pass; } #------------------------------# # ファイルアップロード処理 # #------------------------------# function fileup($upno) { global $UpDir , $ok_file1 , $ok_file2 , $maxsize; //imgフォルダ存在チェック if (!file_exists($UpDir)) { error("$UpDir フォルダが見つかりません。"); exit; } //imgフォルダ書き込みチェック if (!is_writable($UpDir)) { error("$UpDir フォルダに書き込みできません。"); exit; } $file = array(); for ($i = 1; $i < 3; $i++) { $okfile = array(); if ($i == 1) { foreach ($ok_file1 as $tmp) { array_push($okfile,$tmp); } } else { foreach ($ok_file2 as $tmp) { array_push($okfile,$tmp); } } if (!empty($_FILES['file'. $i]['name'])) { $searchdot = strrpos($_FILES['file'.$i]['name'], "."); $tail = substr($_FILES['file'.$i]['name'], $searchdot, strlen($_FILES['file'.$i]['name']) - $searchdot + 1); //ファイルアップ確認フラグ $okflg = 0; //許可拡張子かを調査 foreach ($okfile as $chktail) { if (eregi($chktail, $tail)) { $filesrc = $UpDir. $upno. "-". $i. $tail; move_uploaded_file($_FILES['file'.$i]['tmp_name'], $filesrc); $size = filesize("$filesrc"); //超えていれば削除 if ($maxsize < $size) { if (file_exists($filesrc)) { @unlink($filesrc); } error("ファイルサイズが制限を越えています。"); exit; } $okflg = 1; } } if (!$okflg) { //念のためタグ無効化 $tail = htmlspecialchars(convert($tail)); error('file '. $i. ' には 拡張子「'. $tail. '」はアップロードできません。'); exit; } } else { $tail = ""; } array_push($file,$tail); } return $file; } #--------------------# # 文字コード変換 # #--------------------# function convert($str) { if (function_exists('mb_convert_encoding')) { $code = mb_detect_encoding($str,"UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP"); $str = mb_convert_encoding($str, "SJIS", $code); } elseif (function_exists('JcodeConvert')) { $str = JcodeConvert($str, 0, 2); } return $str; } #--------------------------# # メール文字コード変換 # #--------------------------# function mailconvert($str) { //半角は全角に変換 $str = HANtoZEN_SJIS($str); if (function_exists('mb_convert_encoding')) { $code = mb_detect_encoding($str,"UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP"); #$str = mb_convert_encoding($str, "SJIS", $code); $str = mb_convert_encoding($str, "JIS", $code); } elseif (function_exists('JcodeConvert')) { #$str = JcodeConvert($str, 0, 2); $str = JcodeConvert($str, 0, 3); } return $str; } #------------------# # タイトル表示 # #------------------# function title() { global $title , $tgif , $tgifw , $tgifh; echo '
'; if (!$tgif) { echo $title; } else { echo ''; } echo '
'; } #----------# # 検索 # #----------# function search() { global $log , $logcnt , $logdir , $maxdata , $script , $pastdir , $pcntfile; global $UpDir , $list , $past , $logdir , $tblsize , $maxview; $pg = $_POST['page']; $wd = $_POST['word']; //検索用配列へ現行ログを格納 $logall = file_ex($log); $searchlogall = array(); for ($i = 0; $i < count($logall); $i++) { list($ino) = explode("<>", $logall[$i]); $file = $logdir. $ino. ".php"; $logfileall = file_ex($file); for ($j = 0; $j < count($logfileall); $j++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $logfileall[$j]); $tmp = "$mno<>$mreno<>$mspace<>$mname<>$mmail<>$murl1<>$murl2<>$msubject<>$mcomment<>$mtail1<>$mtail2<>$mpass<>$mdate<>$mtime<>$msolflg<>$mdelflg<>$mip<>$ino<>0<>"; array_unshift($searchlogall, $tmp); } } //過去ログカウントファイルを指定 $pcnt = file_ex($pcntfile, 1); //過去ログカウントを格納 $pno = $pcnt[0]; //過去ログファイルもすべて格納 for ($i = $pno; $i > 0; $i--) { $pfile = $pastdir. $i. ".php"; $plogall = file_ex($pfile); for ($j = 0; $j < count($plogall); $j++) { list($ino) = explode("<>", $plogall[$j]); $ppfile = $logdir. $ino. ".php"; $pplogall = file_ex($ppfile); for ($k = 0; $k < count($pplogall); $k++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip) = explode("<>", $pplogall[$k]); $new = "$mno<>$mreno<>$mspace<>$mname<>$mmail<>$murl1<>$murl2<>$msubject<>$mcomment<>$mtail1<>$mtail2<>$mpass<>$mdate<>$mtime<>$msolflg<>$mdelflg<>$mip<>$ino<>$pno<>"; array_unshift($searchlogall, $new); } } } $resultlog = array(); //不要なバックスラッシュを削除 if (get_magic_quotes_gpc()) { $wd = stripslashes($wd); } //検索後の空白を削除し空欄でなければ検索開始 //※アンダーバーはおかしなものにhitするので除外 if(trim(!empty($wd) && $wd != "_")) { //検索する語を半角スペースで区切って配列追加 $key = preg_split("/[\s]+/", $wd); //ログを検索 foreach ($searchlogall as $hit) { $findflg = 0; for ($i = 0; $i < count($key); $i++){ if (stristr($hit, $key[$i])) { $findflg = 1; //分解 list($mno, $mreno, $mspace, $mname, $mspace, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip, $ino, $pno) = explode("<>", $hit); //hitした場合に文字色を変更(大文字小文字問わず) //色変更はコメント、サイト名、管理者名のみ) if (stristr($mname, $key[$i]) || stristr($mcomment, $key[$i]) || stristr($msubject, $key[$i])) { //「ー」でエラーが出るため日本語はstr、英数字はeregiで置き換え if (eregi("[az,0-9]", $key[$i])) { $hit = eregi_replace("$key[$i]", "$key[$i]", $hit); } else { $hit = str_replace("$key[$i]", "$key[$i]", $hit); } } //AND検索のため、一つでもhitしなければ発見フラグを初期化 } else { $findflg = 0; break; } } if ($findflg) { array_unshift($resultlog, $hit); } } } //ヘッダ表示 head(); //タイトル表示 title(); echo '
« back
search result
'; if (count($resultlog) == 0) { echo '
検索致しましたが、見つかりませんでした。

検索語を見直してください。

'; } else { echo '

'; $j = 0; for ($i=0; $i < count($resultlog); $i++) { list($mno, $mreno, $mspace, $mname, $mmail, $murl1, $murl2, $msubject, $mcomment, $mtail1, $mtail2, $mpass, $mdate, $mtime, $msolflg, $mdelflg, $mip, $ino, $pno) = explode("<>", $resultlog[$i]); $j++; if ($j < $pg + 1) { continue; } if ($j > $pg + $maxview) { continue; } echo '
'; } //next,backボタン表示の設定 $next = $pg + $maxview; $back = $pg - $maxview; echo ' '; if ($next < $j) { echo ' '; } echo '
'; if ($back >= 0) { echo '
'; } else { echo ' '; } echo '
'; } foot(); exit; } #--------------------# # チェックモード # #--------------------# function check() { global $log , $script , $logcnt , $logdir , $cntfile , $pcntfile , $UpDir , $pastdir; $arr = array($log, $logcnt, $pcntfile, $logdir, $cntfile, $UpDir, $pastdir, $pastdir. "1.php"); $arr2 = array("インデックスログファイル", "ログカウントファイル", "過去ログカウントファイル", "ログ格納ディレクトリ", "カウンターファイル", "アップロードディレクトリ", "過去ログディレクトリ", "過去ログファイル"); //ヘッダを表示 head(); echo '

'; title(); echo '
« back

- file check mode -

'; for ($i = 0; $i < count($arr); $i++) { echo ' '; } else { echo $arr2[$i]. '('. $arr[$i]. ')'; } echo ' '; } else { echo '  パーミッション'; } echo ' '; } echo '
'; if (file_exists($arr[$i])) { echo $arr2[$i]. '('. $arr[$i]. ')OKNG '; if (is_writable($arr[$i])) { echo '  パーミッションOKNG

'; //フッタを表示 foot(); exit; } #--------------------------# # 投稿許可IPかのチェック # #--------------------------# function reg_limit_chk() { global $deny; global $ng_word; //IP等々取得 $ip = getenv("REMOTE_ADDR"); if (empty($ip)) { $ip = $_SERVER["REMOTE_ADDR"]; } $host = getenv("REMOTE_HOST"); if (empty($host)) { $host = $_SERVER["REMOTE_HOST"]; } if (empty($host)) { $host = gethostbyaddr($ip); } $err = 0; foreach($deny as $line) { if ($line != "") { $line = preg_replace("/\./", "\.", $line); $line = preg_replace("/\*/", ".*", $line); if (preg_match("/$line/", $ip)) { $err = 1; break; } elseif (preg_match("/$line/", $host)) { $err = 1; break; } } } //スパム対策 $chkcom = convert($_POST['comment']); if (SPAM) { if (!preg_match("/(\\x82[\\x9f-\\xf2]|\\x81\\x5b|\\x83[\x40-\x96]){2,}/", $chkcom)) { $err = 2; } } foreach ($ng_word as $line) { if ($line != "") { if (strstr($chkcom, $line)) { $err = 2; break; } } } if ($err) { switch ($err) { case 1: error("あなたのコメントは受付できません。"); break; default: error("スパムコメントと見なしたために投稿は受付できません。"); break; } exit; } return; } #-------------------- # ファイル保存 # #-------------------- function fp($type, $file, $content) { //$type == 0 --> 配列 //$type == 1 --> 文字列 $fp = fopen($file, "w+"); flock($fp, LOCK_EX); switch ($type) { case 0: array_unshift($content, " ノーマルファイル //$type == "" --> phpファイル。1行目削除 if (file_exists($log)) { $logall = file($log); if (!$type) { array_shift($logall); } } else { $logall = array(); } return $logall; } ?>