NAMECUT) $name = substr($name, 0, NAMECUT).".."; if (strlen($sub) > SUBJCUT) $sub = substr($sub, 0, SUBJCUT).".."; if ($url != "") $url = "".HOMEICON.""; if ($email != "") $name = "$name"; if (AUTOLINK) $com = auto_link($com); // タイプ別ICONを配列に $tok = strtok(ICONTYPE, ","); while ($tok) { $type = explode("|", $tok); $fileicon[$type[0]] = $type[1]; $tok = strtok(","); } // Aのファイルがある場合 if ($filea != "" && file_exists(SAVEDIR.$filea)) { $src_a = SAVEDIR.$filea; $size_a = ceil(filesize($src_a)/1024); //ファイルサイズ(KB) $tail_a = substr(strrchr($src_a, "."), 1);//拡張子を得る // 画像の場合 if (INLINE && ereg("(jpe?g|gif|png)", $tail_a)) { $w_h_a = @getimagesize($src_a); $file_a = ""; // それ以外のファイル } else { $icon = $fileicon[$tail_a]; if (!$icon) $icon = FILEICON; $file_a = "$filea (${size_a}KB)"; } } // Bのファイルがある場合 if ($fileb != "" && file_exists(SAVEDIR.$fileb)) { $src_b = SAVEDIR.$fileb; $size_b = ceil(filesize($src_b)/1024); //ファイルサイズ(KB) $tail_b = substr(strrchr($src_b, "."), 1);//拡張子を得る // 画像の場合 if (INLINE && ereg("(jpe?g|gif|png)", $tail_b)) { $w_h_b = @getimagesize($src_b); $file_b = ""; // それ以外のファイル } else { $icon = $fileicon[$tail_b]; if (!$icon) $icon = FILEICON; $file_b = "$fileb (${size_b}KB)"; } } // 親記事HTML include(MAINFILE); // レス開始位置 $rescnt = count($lines); //レス数 $rest = $rescnt - RESDEF; if ($rest <= 0) $rest = 1; //通常レスは1から // レス数オーバーなら全レスへリンク if ($rest > 1) $resall = "".RESALL.""; // レスがあるなら区切り線 if ($rescnt > 1) echo KUGIRI; // レス記事ループ for ($r = $rest; $r < count($lines); $r++) { if ($lines[$r] == "") continue; // レス記事を要素に分解 list($no,$resno,$now,$name,$email,$sub,$com, $url,$host,$pw,$filea,$fileb,$chk) = explode(",", $lines[$r]); if (trim($com) == "") continue; //本文が空なら都バス // フォーマット if (strlen($name) > NAMECUT) $name = substr($name, 0, NAMECUT).".."; //if (strlen($sub) > SUBJCUT) $sub = substr($sub, 0, SUBJCUT).".."; //if ($url != "") $url = "".HOMEICON.""; if ($email != "") $name = "$name"; if (AUTOLINK) $com = auto_link($com); // レス記事HTML include(RESFILE); } // レスフォームHTML include(FORMFILE); } // ページ処理 $prev = $st - PAGEDEF; $next = $st + PAGEDEF; $prev_st = $prev_to = $next_st = $next_to = ""; if ($prev < 0) $prev = 0; if ($page > 0) { $prev_st = ""; $prev_to = ""; } if ($next < count($thread) && $oya >= PAGEDEF) { $next_st = ""; $next_to = ""; } // フッタHTML include(FOOTFILE); } /* レス単独表示 */ function ResView($no) { global $PHP_SELF,$thread; // ターゲットがないなら終了 if (!is_array($thread[$no])) return false; // クッキー展開 list($c_name, $c_email, $c_pwd) = explode(",", stripslashes($tempcook)); // ヘッダーHTML echo HeadPrint("No. ${no}についてのレス一覧"); echo RESALLHEAD; // 全レス表示 foreach ($thread[$no] as $line) { // 記事を要素に分解 list($no,$resno,$now,$name,$email,$sub,$com, $url,$host,$pw,$filea,$fileb,$chk) = explode(",", $line); // フォーマット if ($url != "") { $link = (HOMEICON) ? HOMEICON : $url; $url = "$link"; } if ($email != "") $name = "$name"; if (AUTOLINK) $com = auto_link($com); // レスNo.0なら親記事 if ($resno == "0") { include(MAINFILE); //親記事HTML } else { include(RESFILE); //レス記事HTML } } // フォームHTML include(FORMFILE); // フッターHTML echo RESALLFOOT; } /* 書き込み前の処理 */ function RegCheck() { global $HTTP_POST_VARS,$REQUEST_METHOD; global $upfile1,$upfile1_name,$upfile1_size,$upfile1_type; global $upfile2,$upfile2_name,$upfile2_size,$upfile2_type; print_r($HTTP_POST_VARS); // フィルターでクリーン $sub = Clean($HTTP_POST_VARS[sub]); $name = Clean($HTTP_POST_VARS[name]); $email = Clean($HTTP_POST_VARS[email]); $url = Clean($HTTP_POST_VARS[url]); $pwd = Clean($HTTP_POST_VARS[pwd]); $com = Clean($HTTP_POST_VARS[com]); $no = Clean($HTTP_POST_VARS[no]); // 空チェック if (!NOSUB && !$no && ereg("^( | )*$", $sub)) error("タイトルを入れてください"); if (!NONAME && ereg("^( | )*$", $name)) error("名前を入力してください"); if (!NOVALUE && ereg("^( | |[\r\n])*$", $com)) error("本文を入力してください"); // 空なら空項目 if (NOSUB && $sub == "") $sub = NOSUB; if (NONAME && $name == "") $name = NONAME; if (NOVALUE && $com == "") $com = NOVALUE; // 長さチェック if (strlen($sub) > MAXSUB) error("タイトルが長すぎます!"); if (strlen($name) > MAXNAME) error("名前が長すぎます!"); if (strlen($com) > MAXVALUE) error("本文が長すぎます!"); $time = time(); $host = gethostbyaddr(getenv("REMOTE_ADDR")); // 連続投稿チェック $fp = fopen(LOGFILE, "r") or error("ログファイルが開けません"); $first = fgets($fp, 4096); fclose($fp); list($lno,$lname,$lcom,$lhost,) = explode(",", $first); if (RENZOKU && $host == $lhost && $time - $ltime < RENZOKU) error("連続投稿はもうしばらく時間を置いてからお願いします"); // NO $newno = ($no) ? $no : $lno + 1; //記事No.レスなら親No、親なら最新+1 $maxno = ($no) ? $lno : $lno + 1; //最新親No.レスなら変えない、親なら最新カウントアプ $resno = ($no) ? count($thread[$res]) : 0; //レス数=レスNo // 時間のフォーマット $now = gmdate(DATEFORMAT, $time+9*3600); // URL $url = ereg_replace("^http://", "", $url); // PASS暗号化 $pass = substr(md5($pwd),2,8); // 使用可タグを<>に戻す if (USETAG) { $tag = explode(",", USETAG); for ($t = 0; $t < count($tag); $t++) { if ($tag[$t] == "") continue; $com = eregi_replace("<".$tag[$t]." ", "<".$tag[$t]." ", $com); $com = eregi_replace("<".$tag[$t].">", "<".$tag[$t].">", $com); $com = eregi_replace("</".$tag[$t], "]*) style=[^>]*>", "<\\1>", $com); $com = eregi_replace("<([^>]*) on.*=[^>]*>", "<\\1>", $com); } // 改行文字の統一。 $com = str_replace("\r\n", "\n", $com); $com = str_replace("\r", "\n", $com); // 行数カウント if (substr_count($com, "\n") > MAXLINE) error("行数オーバーしてます!"); $com = ereg_replace("\n{3,}","\n",$com); //連続する空行を一行 $com = ereg_replace("\n", "
", $com); //改行文字を
に変換 // 二重投稿チェック if ($name == $lname && $com == $lcom) error("二重投稿です!

リロード"); // アプロード処理 $denytype = explode(",", DENYMIME); $allowext = explode(",", ALLOWEXT); // 一つ目 if ($upfile1 != "none" && $upfile1_size > 0) { $upfile1 = eregi_replace("\\\\", "\\", $upfile1); $tail1 = strtolower(substr(strrchr($upfile1_name, "."), 1));//拡張子を得る if (!in_array($tail1, $allowext)) error("その拡張子のファイルはアップロードできません

$upfile1_name"); if (in_array($upfile1_type, $denytype)) error("その種類のファイルはアップロードできません

$upfile1_type"); // コピー先ファイル名決定 $destname1 = (ORIGIN) ? $upfile1_name : $time.".".$tail1; // 既にある場合(違う名前にするべきか if (file_exists(SAVEDIR.$destname1)) error("そのファイルは既にアップロードされてます

$destname1"); // tmpから手前んとこにコピー copy($upfile1, SAVEDIR.$destname1); @chmod(SAVEDIR.$destname1, 0706); } // 2つ目 if ($upfile2 != "none" && $upfile2_size > 0) { $upfile2 = eregi_replace("\\\\", "\\", $upfile2); $tail2 = substr(strrchr($upfile2_name, "."), 1);//拡張子を得る if (!in_array($tail2, $allowext)) error("その拡張子のファイルはアップロードできません

$upfile2_name"); if (in_array($upfile2_type, $denytype)) error("その種類のファイルはアップロードできません

$upfile2_type"); // コピー先ファイル名決定 $destname2 = (ORIGIN) ? $upfile2_name : PREFIX.$time.$tail2; // 既にある場合(違う名前にするべきか if (file_exists(SAVEDIR.$destname2)) error("そのファイルは既にアップロードされてます

$destname2"); // tmpから手前んとこにコピー copy($upfile2, SAVEDIR.$destname2); @chmod(SAVEDIR.$destname2, 0706); } // アプ前チェック $chk = (CHECK) ? 0 : 1; // クッキー保存 $cookval = implode(",", array($name, $email, $pwd)); setcookie("tempcook", $cookval, $time+14*24*3600); // 新データライン $newfirst = implode(",", array($maxno,$name,$com,$time,$host,"\n")); $newline = implode(",", array($newno,$resno,$now,$name,$email,$sub,$com,$url,$host,$pass,$destname1,$destname2,$chk,"\n")); // 現データ配列に $old = file(LOGFILE); // 先頭はチェック用なので進める next($old); // 親記事の場合 if ($resno == 0) { $data = array(); array_push($data, $newfirst, $newline); //チェック用と新データ追加 $new = array_merge($data, $old); //現ログと結合 // レスの場合 } else { array_push($new, $newfirst); //先頭にチェックデータ $find = FALSE; for ($i = 0; $i < count($old); $i++) { list($keyno,) = explode(",", $old[$i]); //NO取り出し if ($newno == $keyno) { //該当スレ $find = TRUE; array_push($data, $old[$i]); //いまのレス list($nextno,) = explode(",", $old[$i+1]); //次の行 if ($nextno != $keyno) array_push($data, $newline); } else { (AGE) ? array_push($tmp, $old[$i]) : array_push($data, $old[$i]); } } $new = array_merge($data, $tmp); if (!$find) error("該当記事が見つかりません"); } // ログ更新 LogRewrite($new); } /* あぷロードファイルが有効かチェキ */ function isUpload($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { $tmp_file = dirname(tempnam('', '')); } $tmp_file .= '/' . basename($filename); /* ユーザーはphp.iniで最後にスラッシュを指定しているかもしれません... */ return (ereg_replace('/+', '/', $tmp_file) == $filename); } /* 外部からの変数掃除 */ function Clean($var) { $var = trim($var); // SJISの場合\マーク除去 if (get_magic_quotes_gpc()) $var = stripslashes($var); // タグを変換 $var = htmlspecialchars($var); // データ区切り文字を変換 return str_replace(",", ",", $var); } /* ログ更新 */ function LogRewrite($arr) { $fp = fopen(LOGFILE, "w"); flock($fp, LOCK_EX); fputs($fp, implode('', $arr)); fclose($fp); } /* 自動リンク */ function auto_link($str) { return preg_replace("/(https?|ftp)(:\/\/[\!-;\=\?-\~]+)/si", "\\1\\2", $str); } /* エラー画面 */ function Error($msg) { die($msg); } if ($mode == "regist") { RegCheck(); } MainView(); ?>