/* 画像掲示板 futaba.php v0.8 lot.031015 このスクリプトはレッツPHP!のgazou.phpを改造したものです。 配布条件はレッツPHP!に準じます。改造、再配布は自由にどうぞ。 このスクリプトに関する質問はレッツPHP!にしないようにお願いします。 最新版はで配布しています。 ご質問は準備板@ふたばまでどうぞ。 設置法: 所望のディレクトリのパーミッションを777にします。 srcディレクトリとthumbディレクトリを作り、パーミッションを777にします。 futaba.phpを置き、ブラウザから呼出します(必要なファイルが自動設定されます)。 gif2pngがある場合は、 gifでもサムネイルを作れます。付属のバイナリはlinux-i386用です。 */ extract($_POST); extract($_GET); extract($_COOKIE); $upfile_name=$_FILES["upfile"]["name"]; $upfile=$_FILES["upfile"]["tmp_name"]; define(LOGFILE, 'img.log'); //ログファイル名 define(TREEFILE, 'tree.log'); //ログファイル名 define(IMG_DIR, 'src/'); //画像保存ディレクトリ。futaba.phpから見て define(THUMB_DIR,'thumb/'); //サムネイル保存ディレクトリ define(TITLE, '萌え画像投棄場跡地'); //タイトル(とTOP) define(HOME, '../../../'); //「ホーム」へのリンク define(MAX_KB, '1024'); //投稿容量制限 KB(phpの設定により2Mまで define(MAX_W, '250'); //投稿サイズ幅(これ以上はwidthを縮小 define(MAX_H, '250'); //投稿サイズ高さ define(PAGE_DEF, '70'); //一ページに表示する記事 define(LOG_MAX, '50000'); //ログ最大行数 define(ADMIN_PASS, 'megusan'); //管理者パス define(RE_COL, '789922'); //>が付いた時の色 define(PHP_SELF, 'imgboard.php'); //このスクリプト名 define(PHP_SELF2, 'index.html'); //入り口ファイル名 define(PHP_EXT, '.htm'); //1ページ以降の拡張子 define(RENZOKU, '5'); //連続投稿秒数 define(RENZOKU2, '10'); //画像連続投稿秒数 define(MAX_RES, '30'); //強制sageレス数 define(USE_THUMB, 1); //サムネイルを作る する:1 しない:0 define(PROXY_CHECK, 0); //proxyの書込みを制限する y:1 n:0 define(DISP_ID, 2); //IDを表示する 強制:2 する:1 しない:0 define(BR_CHECK, 15); //改行を抑制する行数 しない:0 $path = realpath("./").'/'.IMG_DIR; $badstring = array("dummy_string","dummy_string2","https://","@","http://"); //拒絶する文字列 $badfile = array("dummy","dummy2"); //拒絶するファイルのmd5 $badip = array("osakakita.osaka.ocn.ne.jp","yahoobb219182168215.bbtec.net","addr2.dummy.com","ibrk.nt.adsl.ppp.infoweb.ne.jp","ap-TK.usen.ad.jp","a027.ap.plala.or.jp"); //拒絶するホスト $addinfo=''; /* ヘッダ */ function head(&$dat){ $dat.=' '.TITLE.' [ホーム] [管理用] '.TITLE.' '; } /* 投稿フォーム */ function form(&$dat,$resno,$admin=""){ global $addinfo; $maxbyte = MAX_KB * 1024; $no=$resno; if($resno){ $msg .= "[掲示板に戻る]\n"; $msg .= "\n"; $msg .= "レス送信モード\n"; $msg .= "\n"; } if($admin){ $hidden = ""; $msg = "タグがつかえます"; } $dat.=$msg.' '.$hidden.' '; if($no){$dat.=' ';} $dat.=' おなまえ E-mail 題 名 コメント '; if(!$resno){ /* $dat.='添付File [画像なし] '; */ } $dat.='削除キー(記事の削除用。英数字で8文字以内) 萌え画像投棄場跡地です。今までありがとうございました。 運営上、管理者の独断と偏見で、投稿を削除する事があります。 トリップ対応です。コテハンの方は活用下さい。 '.$addinfo.''; } /* 記事部分 */ function updatelog($resno=0){ global $path; $tree = file(TREEFILE); $find = false; if($resno){ $counttree=count($tree); for($i = 0;$i<$counttree;$i++){ list($artno,)=explode(",",rtrim($tree[$i])); if($artno==$resno){$st=$i;$find=true;break;} //レス先検索 } if(!$find) error("該当記事がみつかりません"); } $line = file(LOGFILE); $countline=count($line); for($i = 0; $i < $countline; $i++){ list($no,) = explode(",", $line[$i]); $lineindex[$no]=$i + 1; //逆変換テーブル作成 } $counttree = count($tree); for($page=0;$page<$counttree;$page+=PAGE_DEF){ $dat=''; head($dat); form($dat,$resno); if(!$resno){ $st = $page; } $dat.=''; for($i = $st; $i < $st+PAGE_DEF; $i++){ if($tree[$i]=="") continue; $treeline = explode(",", rtrim($tree[$i])); $disptree = $treeline[0]; $j=$lineindex[$disptree] - 1; //該当記事を探して$jにセット if($line[$j]=="") continue; //$jが範囲外なら次の行 list($no,$now,$name,$email,$sub,$com,$url, $host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $line[$j]); // URLとメールにリンク if($email) $name = "$name"; $com = auto_link($com); $com = eregi_replace("(^|>)(>[^<]*)", "\\1\\2", $com); // 画像ファイル名 $img = $path.$time.$ext; $src = IMG_DIR.$time.$ext; // サムネイルを表示しています.クリックすると元のサイズを表示します."; }else{ $imgsrc = ""; } }else{//それ以外 $imgsrc = ""; } $dat.="画像タイトル:$time$ext-($size B)$imgsrc"; } // メイン作成 $dat.="$sub \n"; $dat.="Name $name $now No.$no \n"; if(!$resno) $dat.="[返信]"; $dat.="\n$com"; // そろそろ消える。 if($lineindex[$no]-1 >= LOG_MAX*0.95){ $dat.="このスレは古いので、もうすぐ消えます。\n"; } //レス作成 if(!$resno){ $s=count($treeline) - 10; if($s<1){$s=1;} elseif($s>1){ $dat.="レス". ($s - 1)."件省略。全て読むには返信ボタンを押してください。\n"; } }else{$s=1;} for($k = $s; $k < count($treeline); $k++){ $disptree = $treeline[$k]; $j=$lineindex[$disptree] - 1; if($line[$j]=="") continue; list($no,$now,$name,$email,$sub,$com,$url, $host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $line[$j]); // URLとメールにリンク if($email) $name = "$name"; $com = auto_link($com); $com = eregi_replace("(^|>)(>[^<]*)", "\\1\\2", $com); // メイン作成 $dat.="…\n"; $dat.="$sub \n"; $dat.="Name $name $now No.$no \n"; $dat.="$com"; $dat.="\n"; } $dat.="\n"; clearstatcache();//ファイルのstatをクリア $p++; if($resno){break;} //res時はtree1行だけ } $dat.=' 【記事削除】 削除キー '; if(!$resno){ //res時は表示しない $prev = $st - PAGE_DEF; $next = $st + PAGE_DEF; // 改ページ処理 $dat.=""; if($prev >= 0){ if($prev==0){ $dat.=""; }else{ $dat.=""; } $dat.=""; $dat.=""; }else{$dat.="最初のページ";} $dat.=""; for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){ if($st==$i){$dat.="[".($i/PAGE_DEF)."] ";} else{ if($i==0){$dat.="[0] ";} else{$dat.="[".($i/PAGE_DEF)."] ";} } } $dat.=""; if($p >= PAGE_DEF && count($tree) > $next){ $dat.=""; $dat.=""; $dat.=""; }else{$dat.="最後のページ";} $dat.="\n"; } foot($dat); if($resno){echo $dat;break;} if($page==0){$logfilename=PHP_SELF2;} else{$logfilename=$page/PAGE_DEF.PHP_EXT;} $fp = fopen($logfilename, "w"); set_file_buffer($fp, 0); rewind($fp); fputs($fp, $dat); fclose($fp); chmod($logfilename,0666); } if(!$resno&&is_file(($page/PAGE_DEF+1).PHP_EXT)){unlink(($page/PAGE_DEF+1).PHP_EXT);} } /* フッタ */ function foot(&$dat){ $dat.=' - GazouBBS + futaba- '; } /* オートリンク */ function auto_link($proto){ $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","\\1\\2",$proto); return $proto; } /* エラー画面 */ function error($mes,$dest=''){ global $upfile_name,$path; if(is_file($dest)) unlink($dest); head($dat); echo $dat; echo " $mesリロード "; die("
[ホーム] [管理用]
'.TITLE.'
$com