/*
* 画像ハリコBBS by ToR
* http://php.s3.to
*
* v1.0 10/26 とりあえず完成
* v1.1 10/18 URL、メールを表示、他
* v1.2 11/28 削除機能
* v2.0 11/30 管理機能、画像チェック(ログ項目追加)他
*/
//-------------設定ここから-------------
# 掲示板のタイトル
$title = '画像BBS〜♪';
# 管理者用パスワード。必ず変更して下さい。
$admin_pass = '4321';
# ファイルをアップロードするディレクトリ
# 最後は / にして下さい。
$up_dir = '/gif/';
# アップロードするディレクトリの絶対パス
$path = dirname($PATH_TRANSLATED).$up_dir;
# ログ保存ファイル
$logfile = 'imglog.log';
# 静的HTMLを書き出す場合のHTMLファイル
$html_file = 'index.html';
# 一ページあたりの表示記事数
$page_def = 7;
# 最大記録件数 これを越えると古い物から順に削除されます。
$max = 200;
# 画像ファイルを
タグで直接表示するかどうか 1 で表示 0 で表示しない
$show_img = 1;
# 同一ホストからの連続投稿を制限
# --> 秒数を記述するとその時間以上を経過しないと連続投稿できない
$w_regist = 30;
# 管理者が許可した画像のみ表示(チェックしてから:1,すべて表示:0)
$ImageCheck = 1;
# 上で1の場合、チェックされてない画像の代替画像
$IconSoon = './soon.gif';
# 画像ファイルの最大表示の大きさ(単位:ピクセル)
# --> これを超える画像は縮小表示します
$MaxW = 250; # 横幅
$MaxH = 100; # 縦幅
# アップロード可能な最大サイズ(単位 : KB)
# -->PHP3.iniまたはphp3_upload_max_filesizeによりますが、
# デフォルト値である2メガ以上は設定できません。
$maxbyte = 150;
# 時差(hour)
$jisa = 0;
//---------設定ここまで--------------
$maxsize = $maxbyte * 1024; //バイトに変換
function head(&$dat){ //ヘッダー表示部
global $mode,$no,$PHP_SELF,$logfile,$maxsize,$MaxW,$MaxH,$title;
if($mode == "resmsg"){ //レスの場合
$res = file($logfile);
$flag = 0;
while (list($key, $value) = each ($res)) {
list($rno,$date,$name,$mail,$sub,$com,$url) = explode("<>", $value);
if ($no == "$rno"){ $flag=1; break; }
}
if ($flag == 0) error("該当記事が見つかりません");
$sub = ereg_replace("^Re", "", $sub);
$r_sub = "Re:[$no] $sub";
$r_com = "> $com";
$r_com = eregi_replace("
","\r> ",$r_com);
}
$dat='
'.$title.'
'.$title.'
[トップに戻る]
[ワード検索]
[管理用]
';
}
function foot(&$dat){ //フッター表示部
global $PHP_SELF;
$dat.='
- GazouBBS -
';
}
function Main(&$dat){ //記事表示部
global $logfile,$page_def,$up_dir,$page,$PHP_SELF,$path,$IconSoon,$ImageCheck;
$view = file($logfile);
$logsize = sizeof($view);
if(isset($page)) $start = $page;
else $start = $logsize - 1;
$end = $start - $page_def + 1;
if($end < 0) $end = 0;
for($s = $start;$s >= $end;$s--){
list($no,$date,$name,$mail,$sub,$com,$url,
$host,$pw,$tail,$W,$H,$time2,$chk) = explode("<>", $view[$s]);
if($url) { $url = "HOME"; }
if($mail){ $name = "$name"; }
$dat.="[$no] $sub ";
$dat.="投稿者:$name 投稿日:$date ";
$dat.="[Res] $url
";
$dat.="$com\n";
if (file_exists("$path$time2$tail")) {
if ($ImageCheck && $chk != 1) {
$dat.="
";
} elseif ($W && $H) {
$dat.="
";
} else {
$dat.= "
";
}
}
$dat.="
\n";
$p++;
} //end for
if(($logsize > $page_def) && ($p >= $page_def)){
$dat.="\n";
}
}
function regist(){ //ログ書き込み
global $name,$email,$sub,$com,$url,$MaxW,$MaxH,$REMOTE_HOST,$REMOTE_ADDR;
global $pwd,$upfile,$html_url,$logfile,$jisa,$max,$w_regist,$path;
# フォーム内容をチェック
if(empty($com)){ error("本文が書き込まれていません"); }
if(empty($sub)){ error("タイトルが記入されていません"); }
$times = time();
$check = file($logfile);
$tail = sizeof($check);
$last = $tail - 1;
list($tno,$tdate,$tname,$tmail,$tsub,$tcom,
$turl,$thost,$tpw,$ttail,$tw,$th,$ttime) = explode("<>", $check[$last]);
if($name == $tname && $com == $tcom) error("二重投稿は禁止です");
if ($w_regist && $times - $ttime < $w_regist)
error("連続投稿はもうしばらく時間を置いてからお願い致します");
# 記事Noを採番
$no = $tno + 1;
# ホスト名を取得
$host = $REMOTE_HOST;
$addr = $REMOTE_ADDR;
if($host == "" || $host == $addr) $host=gethostbyaddr($addr);
# 削除キーを暗号化
if ($pwd) { $PW = crypt(($pwd),aa); }
# URL自動リンク
// if ($autolink) { auto_link($com); }
# 最大記事数処理
if ($max < $tail) {
$del = file($logfile);
$top = $tail - $max;
for($j=$top; $j<=$tail; $j++){
list($no,$date,$name,$mail,$sub,$com,
$url,$host,$pw,$ex,$w,$h,$tim)= explode("<>", $del[$j]);
if (file_exists("$path$tim$ex")){ unlink("$path$tim$ex"); }
$dp = fopen ($logfile,"w");flock($dp,2);
fputs($dp, $del[$j]);flock($dp,3);
fclose($dp);
}
}
$now = date( "Y/m/d(D) H:i",mktime()+$jisa*60*60);
$url = ereg_replace( "^http://", "",$url);
$sub = htmlspecialchars($sub);
$sub = stripslashes($sub);
$name = htmlspecialchars($name);
$name = stripslashes($name);
$com = htmlspecialchars($com);
$com = stripslashes($com);
$com = str_replace( "\r\n", "\r", $com); //改行文字の統一。
$com = str_replace( "\r", "\n", $com);
$com = ereg_replace("\n(( | |\t)*\n){3,}","\n",$com);//連続する空行を一行
$com = nl2br($com); //改行文字の前に
を代入する。
$com = ereg_replace( "\n", "", $com); //\nを文字列から消す。
if ($upfile) {
$size=UpFile();
$W=$size[0];$H=$size[1];
switch($size[2]) {
case 1:
$ext = ".gif";
break;
case 2:
$ext = ".jpg";
break;
case 3:
$ext = ".png";
break;
}
# 画像表示縮小
if ($W > $MaxW || $H > $MaxH) {
$W2 = $MaxW / $W;
$H2 = $MaxH / $H;
if ($W2 < $H2) { $key = $W2; }
else { $key = $H2; }
$W = (int) $W * $key;
$H = (int) $H * $key;
}
}
$new_msg="$no<>$now<>$name<>$email<>$sub<>$com<>$url<>$host<>$PW<>$ext<>$W<>$H<>$times<><>\n";
$fp = fopen($logfile,"a");
flock($fp,2);
fputs($fp, $new_msg);
flock($fp,3);
fclose($fp);
# メール通知処理
// if ($mailing == 1) { mail_to(); }
}
function UpFile(){ //アップロード処理
global $up_dir,$upfile,$upfile_name,$path;
$source = $upfile;
$source_name = $upfile_name;
if(($source <> "none")&&($source <> "")){
if($uperror <> 1){
$dest = $path.$source_name;
if(copy($source,$dest)){
echo "成功";
$imagesize = getimagesize($dest);
switch($imagesize[2]) {
case 0:
error("画像以外はアップロードできません");
unlink($dest);
exit;
case 1:
echo " $imagesize[0] x $imagesize[1]
";
$newname = $path;
$newname .=time() . ".gif";
if(copy($dest,$newname)) {
echo "GIF アップ成功
$newname";
} else {
error("GIF リネームに失敗");
}
unlink ($dest);
break;
case 2:
echo "$imagesize[0] x $imagesize[1]
";
$newname = $path;
$newname .=time() . ".jpg";
if(copy($dest,$newname)) {
echo "JPG アップ成功
$newname";
} else {
error("JPG リネームに失敗");
}
unlink ($dest);
break;
case 3:
echo "$imagesize[0] x $imagesize[1]
";
$newname = $path;
$newname .=time() . ".png";
if(copy($dest,$newname)) {
echo "PNG アップ成功
$newname";
} else {
error(" PNG リネームに失敗");
}
unlink ($dest);
break;
}
}
else {
error("Upload ディレクトリに書きこみ失敗\n");
$uperror = 1;
}
}
unlink($source);
}
return $imagesize;
}
function usrdel(){ //ユーザー削除
global $pwd,$no,$logfile,$path;
if ($no == "" || $pwd == "")
{ error("削除Noまたは削除キーが入力モレです"); }
$logall = file($logfile);
$flag=0;
while(list(,$lines)=each($logall)){
list($o_no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$o_tim) = explode("<>",$lines);
if ($no == "$o_no") { $flag=1; $PWD=$pw; $upfile="$o_tim$tail"; }
else { $pushlog[]=$lines; }
}
if ($flag == 0) { error("該当記事が見当たりません"); }
if ($PWD == "") { error("該当記事には削除キーが設定されていません"); }
# 削除キーを照合
$match = crypt(($pwd),aa);
if ($match != $PWD) { error("削除キーが違います"); }
# ログを更新
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($pushlog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
if(file_exists("$path$upfile")){ unlink("$path$upfile"); }
}
function admin(){ //管理機能
global $admin_pass,$PHP_SELF,$logfile,$path,$ImageCheck,$up_dir;
global $del,$pass,$chk;
if ($pass && $pass != "$pass")
{ error("パスワードが違います"); }
?>
echo "$title";
echo "";
echo "[掲示板に戻る]\n";
echo "| \n";
echo "管理モード\n";
echo " |
|---|
\n";
if (!$pass) {
echo "パスワードを入力して下さい
\n";
echo "\n";
}else {
# 画像許可
if ($chk) {
# 画像情報をマッチングし更新
$logall = file($logfile);
while(list(,$lines)=each($logall)){
list($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$o_tim,$check) = explode("<>",$lines);
if ($chk == "$no") { $lines="$no<>$date<>$name<>$mail<>$sub<>$com<>$url<>$host<>$pw<>$tail<>$w<>$h<>$o_tim<>1<>"; }
$pushlog[]=$lines;
}
# ログを更新
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($pushlog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
}
# 削除処理
if ($del) {
# 削除情報をマッチングし更新
$delall = file($logfile);
while(list(,$delline)=each($delall)){
$flag = 0;
list($no,$date,$name,$mail,$sub,$com,$url,$host,$pw,$tail,$w,$h,$time) = explode("<>",$delline);
if ($del == "$no") {
$flag = 1;
if (file_exists("$path$time$tail")){
unlink("$path$time$tail");}
}
if($flag == 0){ $dellog[]=$delline; }
}
# ログを更新
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($dellog)){
fputs($fp, $val);
}
flock($fp,3);
fclose($fp);
}
# 削除画面を表示
echo "\n";
$all = (int)($all / 1024);
echo "【添付デ?[タ総数 : $all KB】\n";
}
echo "\n";
echo "\n";
exit;
}
function MakeHtml(){ //HTML生成
global $html_file;
head($buf);
Main($buf);
foot($buf);
$hp = fopen ($html_file,"w");
flock($hp,2);
fputs($hp, $buf);
flock($hp,3);
fclose($hp);
include("$html_file");
exit;
}
function error($mes){ //エラーフォーマット
?>
echo $mes; ?>
exit;
}
?>