とTOP) define(HOME, 'http://php.s3.to'); //「ホーム」へのリンク define(MAX_KB, '100'); //投稿容量制限 KB(phpの設定により2Mまで define(MAX_W, '250'); //投稿サイズ幅(これ以上はwidthを縮小 define(MAX_H, '250'); //投稿サイズ高さ define(PAGE_DEF, '7'); //一ページに表示する記事 define(LOG_MAX, '200'); //ログ最大行数 define(ADMIN_PASS, '0123'); //管理者パス define(CHECK, 0); //管理者がチェックしてから画像表示?yes=1 define(SOON_ICON, 'soon.jpg'); //チェック中の時の代替画像 define(RE_COL, '789922'); //>が付いた時の色 define(BUNRI, 0); //投稿フォームを分離する? define(PHP_SELF, $PHP_SELF); //このスクリプト名 //画像保存相対パス $path="/home/public_html/***/img/"; $path = dirname($PATH_TRANSLATED).IMG_DIR; /* ヘッダ */ function head(&$dat){ $dat.=' '.TITLE.'

[ホーム] [管理用]

'.TITLE.'


'; } /* 投稿フォーム */ function form(&$dat,$resno,$admin=""){ global $gazoubbs; list($cname,$cemail,$cpass) = explode(",", $gazoubbs); $maxbyte = MAX_KB * 1024; if($resno){ $find = false; $line = file(LOGFILE); for($i = 0; $i < count($line); $i++){ list($no,$now,$name,$email,$sub,$com,) = explode(",", $line[$i]); if($no == $resno){ $find = true; break; } } if(!$find) error("該当記事がみつかりません"); if(ereg("Re\[([0-9])\]:", $sub, $reg)){ $reg[1]++; $r_sub=ereg_replace("Re\[([0-9])\]:", "Re[$reg[1]]:", $sub); }elseif(ereg("^Re:", $sub)){ $r_sub=ereg_replace("^Re:", "Re[2]:", $sub); }else{ $r_sub = "Re:$sub"; } $r_com = ">$com"; $r_com = ereg_replace("","\r>",$r_com); $msg = "
No. $no へのレスです
"; } if($admin){ $hidden = ""; $msg = "

タグがつかえます

"; } $dat.='
'.$msg.'
'.$hidden.'
おなまえ
Eメール
題  名
コメント
URL
添付File
削除キー (記事の削除用。英数字で8文字以内)
  • 添付可能ファイル : GIF, JPG, PNG
  • ブラウザによっては正常に添付できないことがあります。
  • 最大投稿データ量は '.MAX_KB.' KB までです。
  • 画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。

  • '; } /* 記事部分 */ function main(&$dat, $page){ global $path; $line = file(LOGFILE); $st = ($page) ? $page : 0; for($i = $st; $i < $st+PAGE_DEF; $i++){ if($line[$i]=="") continue; list($no,$now,$name,$email,$sub,$com,$url, $host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $line[$i]); // URLとメールにリンク if($url) $url = "Link"; if($email) $name = "$name"; $com = auto_link($com); $com = eregi_replace("(^|>)(>[^<]*)", "\\1\\2", $com); // 画像ファイル名 $img = $path.$time.$ext; $src = '.'.IMG_DIR.$time.$ext; /* 自由に変更してください["]=[\"]に */ // "; }elseif($w && $h){//サイズがある時 $imgsrc = "\"".$size.""; }else{//それ以外 $imgsrc = "\"".$size.""; } } // メイン作成 $dat.="No.$no $sub
    "; $dat.="Name $name Date $now   $url [レス]"; $dat.="

    $imgsrc $com


    \n"; $p++; clearstatcache();//ファイルのstatをクリア } $prev = $st - PAGE_DEF; $next = $st + PAGE_DEF; // 改ページ処理 $dat.="\n"; if($prev >= 0){ $dat.="\n"; } if($p >= PAGE_DEF && count($line) > $next){ $dat.="\n"; } $dat.="\n
    "; $dat.=""; $dat.="\n"; $dat.="
    "; $dat.=""; $dat.=" \n"; $dat.="
    \n"; } /* フッタ */ function foot(&$dat){ $dat.='
    【記事削除】
    記事No 削除キー

    - GazouBBS -

    '; } /* 記事書き込み */ function regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name){ global $REQUEST_METHOD,$path; if($REQUEST_METHOD != "POST") error("不正な投稿をしないで下さい"); // フォーム内容をチェック if(!$name||ereg("^( | )*$",$name)) error("名前が書き込まれていません"); if(!$com||ereg("^( | |\t)*$",$com)) error("本文が書き込まれていません"); if(!$sub||ereg("^( | )*$",$sub)) $sub="(無題)"; if(strlen($com) > 1000) error("本文が長すぎますっ!"); $line = file(LOGFILE); // 時間とホスト取得 $tim = time(); $host = gethostbyaddr(getenv("REMOTE_ADDR")); // 連続投稿チェック list($lastno,,$lname,,,$lcom,,$lhost,,,,,$ltime,) = explode(",", $line[0]); if(RENZOKU && $host == $lhost && $tim - $ltime < RENZOKU) error("連続投稿はもうしばらく時間を置いてからお願い致します"); // No.とパスと時間とURLフォーマット $no = $lastno + 1; $c_pass = $pwd; $pass = ($pwd) ? substr(md5($pwd),2,8) : "*"; $now = gmdate("Y/m/d(D) H:i",$tim+9*60*60); $url = ereg_replace("^http://", "", $url); //テキスト整形 $name = CleanStr($name); $email= CleanStr($email); $sub = CleanStr($sub); $url = CleanStr($url); $com = CleanStr($com); // 改行文字の統一。 $com = str_replace( "\r\n", "\n", $com); $com = str_replace( "\r", "\n", $com); // 連続する空行を一行 $com = ereg_replace("\n(( | )*\n){3,}","\n",$com); $com = nl2br($com); //改行文字の前に
    を代入する $com = str_replace("\n", "", $com); //\nを文字列から消す。 // 二重投稿チェック if($name == $lname && $com == $lcom) error("二重投稿は禁止です

    リロード"); // ログ行数オーバー if(count($line) >= LOG_MAX){ for($d = count($line)-1; $d >= LOG_MAX-1; $d--){ list($dno,,,,,,,,,$ext,,,$dtime,) = explode(",", $line[$d]); if(is_file($path.$dtime.$ext)) unlink($path.$dtime.$ext); $line[$d] = ""; } } // アップロード処理 if($upfile != "none"){ $dest = $path.$upfile_name; move_uploaded_file($upfile, $dest); //copy($upfile, $dest); if(!is_file($dest)) error("アップロードに失敗しました。サーバがサポートしていない可能性があります"); $size = getimagesize($dest); $W = $size[0]; $H = $size[1]; $ext = substr($upfile_name,-4); rename($dest,$path.$tim.$ext); // 画像表示縮小 if($W > MAX_W || $H > MAX_H){ $W2 = MAX_W / $W; $H2 = MAX_H / $H; ($W2 < $H2) ? $key = $W2 : $key = $H2; $W = $W * $key; $H = $H * $key; } $mes = "画像 $upfile_name のアップロードが成功しました

    "; } $chk = (CHECK) ? 0 : 1;//未チェックは0 //クッキー保存 $cookvalue = implode(",", array($name,$email,$c_pass)); setcookie ("gazoubbs", $cookvalue,time()+14*24*3600); /* 2週間で期限切れ */ $newline = "$no,$now,$name,$email,$sub,$com,$url,$host,$pass,$ext,$W,$H,$tim,$chk,\n"; $fp = fopen(LOGFILE, "w"); flock($fp, 2); fputs($fp, $newline); fputs($fp, implode('', $line)); fclose($fp); echo "$msg 画面を切り替えます"; echo ""; } /* テキスト整形 */ function CleanStr($str){ global $admin; $str = trim($str);//先頭と末尾の空白除去 if (get_magic_quotes_gpc()) {//¥を削除 $str = stripslashes($str); } if($admin!=ADMIN_PASS){//管理者はタグ可能 $str = htmlspecialchars($str);//タグっ禁止 $str = str_replace("&", "&", $str);//特殊文字 } return str_replace(",", ",", $str);//カンマを変換 } /* ユーザー削除 */ function usrdel($no,$pwd){ global $path; if($no == "") error("削除Noが入力漏れです"); $line = file(LOGFILE); $flag = FALSE; for($i = 0; $i掲示板に戻る]\n"; echo "
    \n"; echo "管理モード\n"; echo "
    \n"; echo "

    \n"; // ログインフォーム if(!$pass){ echo "
    記事削除 "; echo "管理人投稿

    "; echo "\n"; echo ""; echo "

    \n"; die(""); } } /* 管理者削除 */ function admindel($delno,$chkno,$pass){ global $path; if($chkno || $delno){ $line = file(LOGFILE); $find = FALSE; for($i = 0; $i < count($line); $i++){ list($no,$now,$name,$email,$sub,$com,$url, $host,$pw,$ext,$w,$h,$tim,$chk) = explode(",",$line[$i]); if($chkno == $no){//画像チェック$chk=1に $find = TRUE; $line[$i] = "$no,$now,$name,$email,$sub,$com,$url,$host,$pw,$ext,$w,$h,$tim,1,\n"; break; } if($delno == $no){//削除の時は空に $find = TRUE; $line[$i] = ""; $delfile = $path.$tim.$ext; //削除ファイル break; } } if($find){//ログ更新 $fp = fopen(LOGFILE, "w"); flock($fp, 2); fputs($fp, implode('', $line)); fclose($fp); if(is_file($delfile)) unlink($delfile);//削除 } } // 削除画面を表示 echo "\n"; echo "\n"; echo "\n"; echo "

    削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n"; echo "

    \n"; echo ""; echo ""; if(CHECK) echo ""; echo "\n"; $line = file(LOGFILE); for($j = 0; $j < count($line); $j++){ $img_flag = FALSE; list($no,$now,$name,$email,$sub,$com,$url, $host,$pw,$ext,$w,$h,$time,$chk) = explode(",",$line[$j]); // フォーマット list($now,$dmy) = split("\(", $now); if($email) $name="$name"; $com = str_replace("
    "," ",$com); $com = htmlspecialchars($com); if(strlen($com) > 40) $com = substr($com,0,38) . " ..."; // 画像があるときはリンク if($ext && is_file($path.$time.$ext)){ $img_flag = TRUE; $clip = "".$time.$ext.""; $size = filesize($path.$time.$ext); $all += $size; //合計計算 }else{ $clip = ""; $size = 0; } $bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色 echo ""; echo ""; echo ""; echo "\n"; if(CHECK){//画像チェック if($img_flag && $chk == 1){ echo ""; }elseif($img_flag && $chk != 1) { echo ""; }else{ echo ""; } } echo "\n"; } if(CHECK) $msg = "or許可する"; echo "
    削除記事No投稿日題名投稿者コメントホスト名添付
    (Bytes)
    画像
    許可
    $no$now$sub$name$com$host$clip
    ($size)
    OK

    "; echo ""; $all = (int)($all / 1024); echo "【 画像データ合計 : $all KB 】"; die("

    "); } /* オートリンク */ function auto_link($proto){ $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","\\1\\2",$proto); return $proto; } /* エラー画面 */ function error($mes){ global $upfile_name,$path; if(is_file($path.$upfile_name)) unlink($path.$upfile_name); head($dat); echo $dat; echo "




    $mes



    "; die(""); } /*-----------Main-------------*/ switch($mode){ case 'regist': regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name); break; case 'admin': valid($pass); if($admin=="del") admindel($del,$chk,$pass); if($admin=="post"){ echo ""; form($post,$res,1); echo $post; die(""); } break; case 'usrdel': usrdel($no,$pwd); default: head($buf); if(!BUNRI) form($buf,$res); main($buf,$page); foot($buf); echo $buf; } ?>