extract zips

This commit is contained in:
Neo committed 2022-07-22 04:22:16 -07:00
1 parent 9e5c1e5525
commit 653819b263
24 files changed
+4364

No files matched your search

BIN
View File
Binary file not shown.
+579
View File
@@ -0,0 +1,579 @@
<?
/*
* 画像ハリコ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;
# 画像ファイルを <IMG> タグで直接表示するかどうか 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 = "&gt; $com";
$r_com = eregi_replace("<br>","\r&gt; ",$r_com);
}
$dat='<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.$title.'</title></head>
<body bgcolor="#FFFFCC" text="#800000" link="#0000EE" vlink="#0000EE">
<center><!--上部バナー--><P>
<font color="#800000" face="MS Pゴシック" size=5><b><SPAN>'.$title.'</SPAN></b></font>
<hr width="90%">
[<a href="../index.html" target="_top">トップに戻る</a>]
[<a href="">ワード検索</a>]
[<a href="'.$PHP_SELF.'?mode=admin">管理用</a>]
<hr width="90%">
</center>
<blockquote>
<form action="'.$PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td><b>おなまえ</b></td>
<td><input type=text name=name size="28" value=""></td>
</tr>
<tr>
<td><b>Eメール</b></td>
<td><input type=text name=email size="28" value=""></td>
</tr>
<tr>
<td><b>題  名</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td colspan=2>
<b>メッセージ</b><br>
<textarea name=com cols="54" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.$maxbyte.'KB までです。<br>
<LI>画像は横 '.$MaxW.'ピクセル、縦 '.$MaxH.'ピクセルを超えると縮小表示されます。</small>
</td></tr></table></form>
</blockquote><hr>';
}
function foot(&$dat){ //フッター表示部
global $PHP_SELF;
$dat.='<table align=right><tr>
<td nowrap align=center><form action="'.$PHP_SELF.'" method="POST">
<input type=hidden name=mode value="usrdel">
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><!--下部バナー--><P><small><!-- GazouBBS v2.0 -->
- <a href="http://php.s3.to" target="_top">GazouBBS</a> -
</small></center>
</body></html>';
}
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 = "<a href=\"http://$url\" target=\"_blank\">HOME</a>"; }
if($mail){ $name = "<a href=\"mailto:$mail\">$name</a>"; }
$dat.="[<b>$no</b>] <font color=\"$sub_color\"><b>$sub</b></font> ";
$dat.="投稿者:<b>$name</b> <small>投稿日:$date</small> ";
$dat.="[<a href=\"$PHP_SELF?mode=resmsg&no=$no\">Res</a>] &nbsp; $url <br>";
$dat.="<blockquote>$com\n";
if (file_exists("$path$time2$tail")) {
if ($ImageCheck && $chk != 1) {
$dat.="<P><img src=\"$IconSoon\">";
} elseif ($W && $H) {
$dat.="<P><a href=\".$up_dir$time2$tail\" target='_blank'><img src=\".$up_dir$time2$tail\" width=$W height=$H border=0></a>";
} else {
$dat.= "<P><a href=\".$up_dir$time2$tail\" target='_blank'><img src=\".$up_dir$time2$tail\" border=0></a>";
}
}
$dat.="</blockquote><hr>\n";
$p++;
} //end for
if(($logsize > $page_def) && ($p >= $page_def)){
$dat.="<table align=left><tr>\n";
$dat.="<td><form action=$PHP_SELF?page=$end method=POST>";
$dat.="<input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n</tr></table>\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); //改行文字の前に<br>を代入する。
$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]<br>";
$newname = $path;
$newname .=time() . ".gif";
if(copy($dest,$newname)) {
echo "GIF アップ成功 <br>$newname";
} else {
error("GIF リネームに失敗");
}
unlink ($dest);
break;
case 2:
echo "$imagesize[0] x $imagesize[1]<br>";
$newname = $path;
$newname .=time() . ".jpg";
if(copy($dest,$newname)) {
echo "JPG アップ成功 <br>$newname";
} else {
error("JPG リネームに失敗");
}
unlink ($dest);
break;
case 3:
echo "$imagesize[0] x $imagesize[1]<br>";
$newname = $path;
$newname .=time() . ".png";
if(copy($dest,$newname)) {
echo "PNG アップ成功 <br>$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("パスワードが違います"); }
?>
<html><html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:9pt; }
a:hover { color:#DD0000; }
span { font-size:20pt; }
small { font-size:9pt }
-->
</STYLE>
<?
echo "<title>$title</title></head>";
echo "<body bgcolor=\"#FFFFCC\" text=\"#800000\">";
echo "[<a href=\"$PHP_SELF\?\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=\"#A08000\">\n";
echo "<font color=\"#FFFFFF\">管理モード</font>\n";
echo "</th></tr></table>\n";
if (!$pass) {
echo "<P><center><h4>パスワードを入力して下さい</h4>\n";
echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form>\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 "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if ($ImageCheck) { echo "<th>画像<br>許可</th>"; }
echo "</tr>\n";
$delmode = file($logfile);
while (list(,$val)=each($delmode)){
$img_flag=0;
list($no,$date,$name,$mail,$sub,$com,$url,
$host,$pw,$tail,$w,$h,$time,$chk) = explode("<>",$val);
list($date,$dmy) = split("\(", $date);
if ($mail) { $name="<a href=\"mailto:$mail\">$name</a>"; }
$com = str_replace("<br>","",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40){ $com = substr($com,0,38) . " ..."; }
if (file_exists("$path$time$tail")) {
$img_flag = 1;
$clip = "<a href=\"$up_dir$time$tail\" target='_blank'>画像</a>";
$size = filesize("$path$time$tail");
$all += $size;
} else {
$clip = "";
$size = 0;
}
echo "<tr><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$date</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
# 画像許可
if ($ImageCheck) {
if ($img_flag == 1 && $chk == 1) {
echo "<th><font color=red>OK</font></th>";
} elseif ($img_flag == 1 && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
} else {
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
echo "</table>\n";
echo "<P><input type=submit value=\"削除する\">";
echo "<input type=reset value=\"リセット\"></form>\n";
$all = (int)($all / 1024);
echo "【添付デ?[タ総数 : <b>$all</b> KB】\n";
}
echo "</center>\n";
echo "</body></html>\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){ //エラーフォーマット
?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis"></head>
<body bgcolor="#f9f9ce" text="#1A1A1A">
<br><br><hr size=1><br><br>
<center><font color=red size=5><b><? echo $mes; ?></b></font></center>
<br><br><hr size=1></body></html>
<?
exit;
}
?>
BIN
View File
Binary file not shown.
+563
View File
@@ -0,0 +1,563 @@
<?
/*
* �摜BBS by ToR
* http://php.s3.to
*
* �摜�n���R�f���‚ł��BJPG�AGIF�APNG�̂ݱ���۰�މ”\
*
* �ۑ��p�f�B���N�g���uimg�v���쐬���ď������ݑ����i717���j��ݒ肵�Ă�������
* �ŋ߂̖����T�[�o��SAFE MODE���ݒ肳��Ă��鏊���������ߎg����ꏊ�͌����܂��B
* OK->http://www.coolfreehost.com http://www.saxen.net
*
*2000/10/26 v1.0 �Ƃ肠��������
*2000/10/18 v1.1 URL�A���[����\���A��
*2000/11/28 v1.2 �폜�@�\
*2000/11/30 v2.0 �Ǘ��@�\�A�摜�`�F�b�N�i���O���ڒlj��j��
*2001/03/17 v2.1 �����Ĉ�‚ɁA�摜�ۑ��������ԁ����[�J����
*/
//-------------�ݒ肱������-------------
# �f���‚̃^�C�g��
$title = '�摜BBS�`��';
# �Ǘ��җp�p�X���[�h�B�K���ύX���ĉ������B
$admin_pass = '0123';
# �t�@�C�����A�b�v���[�h����f�B���N�g��
# �Ō�� / �ɂ��ĉ������B
$up_dir = '/img/';
# �A�b�v���[�h����f�B���N�g���̐�΃p�X
$path = dirname($PATH_TRANSLATED).$up_dir;
# ���O�ۑ��t�@�C��
$logfile = 'imglog.log';
# �ÓIHTML�������o���ꍇ��HTML�t�@�C��
$html_file = '';
# ��y�[�W������̕\���L����
$page_def = 7;
# �ő�L�^���� ������z����ƌÂ������珇�ɍ폜����܂��B
$max = 200;
# �摜�t�@�C���� <IMG> �^�O�Œ��ڕ\�����邩�ǂ��� 1 �ŕ\�� 0 �ŕ\�����Ȃ�
$show_img = 1;
# ����z�X�g����̘A�����e�𐧌�
# --> �b�����L�q����Ƃ��̎��Ԉȏ���o�߂��Ȃ��ƘA�����e�ł��Ȃ�
$w_regist = 0;
# �Ǘ��҂����‚����摜�̂ݕ\���i�`�F�b�N���Ă���F1,���ׂĕ\���F0�j
$ImageCheck = 0;
# ���1�̏ꍇ�A�`�F�b�N����ĂȂ��摜�̑�։摜
$IconSoon = './soon.gif';
# �摜�t�@�C���̍ő�\���̑傫���i�P�ʁF�s�N�Z���j
# --> ����𒴂���摜�͏k���\�����܂�
$MaxW = 300; # ����
$MaxH = 300; # �c��
# �A�b�v���[�h�”\�ȍő�T�C�Y�i�P�� : KB�j
# -->php.ini�܂���php_upload_max_filesize�ɂ��܂����A
# �f�t�H���g�l�ł���Q���K�ȏ�͐ݒ�ł��܂���B
$maxbyte = 150;
$HTML = 0;
//---------�ݒ肱���܂�--------------
$maxsize = $maxbyte * 1024; //�o�C�g�ɕϊ�
function head(&$dat){ //�w�b�_�[�\����
global $mode,$no,$PHP_SELF,$logfile,$maxsize,$maxbyte,$MaxW,$MaxH,$title;
if($mode == "resmsg"){ //���X�̏ꍇ
$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("�Y���L�������‚���܂���");
$r_sub = "Re:$sub";
$r_com = "&gt;$com";
$r_com = eregi_replace("<br>","\r&gt;",$r_com);
}
$dat='<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.$title.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="../index.html" target="_top">�g�b�v�ɖ߂�</a>]
[���[�h����]
[<a href="'.$PHP_SELF.'?mode=admin">�Ǘ��p</a>]
</p>
<center><!--�㕔�o�i�[--><P>
<font color="#800000" face="�l�r �o�S�V�b�N" size=5><b><SPAN>'.$title.'</SPAN></b></font>
<hr width="90%" size=1>
<form action="'.$PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>���Ȃ܂�</b></td>
<td><input type=text name=name size="28" value=""></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�d���[��</b></td>
<td><input type=text name=email size="28" value=""></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>��@�@��</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="���M����"><input type=reset value="���Z�b�g">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�R�����g</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�t�q�k</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�Y�tFile</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�폜�L�[</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="">
<small>(�L���̍폜�p�B�p������8�����ȓ�)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>�Y�t�”\�t�@�C�� �F GIF, JPG, PNG<br>
<LI>�u���E�U�ɂ���Ă͐���ɓY�t�ł��Ȃ����Ƃ�����܂��B<br>
<LI>�ő哊�e�f�[�^�ʂ� '.$maxbyte.'KB �܂łł��B<br>
<LI>�摜�͉� '.$MaxW.'�s�N�Z���A�c '.$MaxH.'�s�N�Z���𒴂���Ək���\������܂��B</small>
</td></tr></table></form></center>
<hr>';
}
function foot(&$dat){ //�t�b�^�[�\����
global $PHP_SELF;
$dat.='<table align=right><tr>
<td nowrap align=center><form action="'.$PHP_SELF.'" method="POST">
<input type=hidden name=mode value="usrdel">
�y�L���폜�z<br>
�L��No<input type=text name=no size=3>
�폜�L�[<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="�폜">
</form></td>
</tr></table><br clear=all>
<center><!--�����o�i�[--><P><small><!-- GazouBBS v2.0 -->
- <a href="http://php.s3.to" target="_top">GazouBBS</a> -
</small></center>
</body></html>';
}
function Main(&$dat){ //�L���\����
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,$imgfile,$W,$H,$time2,$chk) = explode("<>", $view[$s]);
if($url) { $url = "<a href=\"http://$url\" target=\"_blank\">HOME</a>"; }
if($mail){ $name = "<a href=\"mailto:$mail\">$name</a>"; }
$com = eregi_replace("(&gt;)([^<]*)", "<font color=789922>\\1\\2</font>", $com);
if ($imgfile && file_exists("$path$imgfile")) {
if ($ImageCheck && $chk != 1) {
$dat.="<P><img src=\"$IconSoon\">";
} elseif ($W && $H) {
$dat.="<P><a href=\".$up_dir$imgfile\" target='_blank'><img src=\".$up_dir$imgfile\" width=$W height=$H border=0 align=left hspace=20></a>";
} else {
$dat.= "<P><a href=\".$up_dir$imgfile\" target='_blank'><img src=\".$up_dir$imgfile\" border=0 align=left hspace=20></a>";
}
}
$dat.="No.$no <font color=\"#cc1105\" size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=\"#117743\"><b>$name</b></font> Date $date ";
$dat.="[<a href=\"$PHP_SELF?mode=resmsg&no=$no\">RES</a>] &nbsp; $url <p>";
$dat.="<blockquote>\n";
$dat.="$com</blockquote><br clear=left><hr>\n";
$p++;
} //end for
if(($logsize > $page_def) && ($p >= $page_def)){
$dat.="<table align=left><tr>\n";
$dat.="<td><form action=$PHP_SELF?page=$end method=POST>";
$dat.="<input type=submit value=\"���̃y�[�W\" name=submit>\n";
$dat.="</form></td>\n</tr></table>\n";
}
}
function regist(){ //���O��������
global $name,$email,$sub,$com,$url,$MaxW,$MaxH,$source_name;
global $pwd,$upfile,$html_url,$logfile,$jisa,$max,$w_regist,$path;
// �t�H�[�����e���`�F�b�N
if(empty($com)){ error("�{�����������܂�Ă��܂���"); }
if(empty($name)){ error("���O���L������Ă��܂���"); }
if(empty($sub)){ $sub="�i����j"; }
$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("��d���e�͋֎~�ł�");
if ($w_regist && $times - $ttime < $w_regist)
error("�A�����e�͂������΂炭���Ԃ�u���Ă��炨�肢�v���܂�");
// �L��No���̔�
$no = $tno + 1;
// �z�X�g�����擾
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host == "" || $host == $addr) $host=@gethostbyaddr($addr);
// �폜�L�[���Í���
if ($pwd) { $PW = crypt(($pwd),aa); }
// URL���������N
if ($autolink) { auto_link($com); }
// �ő�L��������
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 = gmdate( "Y/m/d(D) H:i",time()+9*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); //���s�����̓���B
$com = str_replace( "\r", "\n", $com);
$com = ereg_replace("\n((�@| |\t)*\n){3,}","\n",$com);//�A�������s����s
$com = nl2br($com); //���s�����̑O��<br>��������B
$com = ereg_replace( "\n", "", $com); //\n�𕶎��񂩂�����B
$times = time();
if ($upfile) {
$fname=UpFile();
$size = @getimagesize("$path$fname");
$W=$size[0];$H=$size[1];
// �摜�\���k��
if ($W > $MaxW || $H > $MaxH) {
$W2 = $MaxW / $W;
$H2 = $MaxH / $H;
($W2 < $H2) ? $key = $W2 : $key = $H2;
$W = (int) $W * $key;
$H = (int) $H * $key;
}
}
$new_msg="$no<>$now<>$name<>$email<>$sub<>$com<>$url<>$host<>$PW<>$fname<>$W<>$H<>$times<><>\n";
$fp = fopen($logfile,"a");
flock($fp,2);
fputs($fp, $new_msg);
flock($fp,3);
fclose($fp);
// ���[���ʒm����
// if ($mailing == 1) { mail_to(); }
}
function UpFile(){ //�A�b�v���[�h����
global $up_dir,$upfile,$upfile_name,$path;
$source = $upfile;
$source_name = $upfile_name;
if(($source != "none")&&($source != "")){
$dest = $path.$source_name;
if(copy($source,$dest)){
echo "����";
$imagesize = getimagesize($dest);
switch($imagesize[2]) {
case 0:
error("�摜�ȊO�̓A�b�v���[�h�ł��܂���");
unlink($dest);
exit;
case 1:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "GIF�摜 �A�b�v���� �| $dest";
break;
case 2:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "JPG�摜 �A�b�v���� �| $dest";
break;
case 3:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "PNG�摜 �A�b�v���� �| $dest";
break;
}
} else {
error("Upload �f�B���N�g���ɏ������ݎ��s\n");
}
unlink($source);
}
return $source_name;
}
function usrdel(){ //���[�U�[�폜
global $pwd,$no,$logfile,$path;
if ($no == "" || $pwd == "")
{ error("�폜No�܂��͍폜�L�[�����̓����ł�"); }
$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="$tail"; }
else { $pushlog[]=$lines; }
}
if ($flag == 0) { error("�Y���L������������܂���"); }
if ($PWD == "") { error("�Y���L���ɂ͍폜�L�[���ݒ肳��Ă��܂���"); }
// �폜�L�[���ƍ�
$match = crypt(($pwd),aa);
if ($match != $PWD) { error("�폜�L�[���Ⴂ�܂�"); }
// ���O���X�V
$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;
global $del,$pass,$chk;
if ($pass && $pass != "$pass")
{ error("�p�X���[�h���Ⴂ�܂�"); }
?>
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:9pt; }
a:hover { color:#DD0000; }
span { font-size:20pt; }
small { font-size:9pt }
-->
</STYLE>
<?
echo "<title>$title</title></head>";
echo "<body bgcolor=\"#FFFFEE\" text=\"#800000\">";
echo "[<a href=\"$PHP_SELF\?\">�f���‚ɖ߂�</a>]\n";
echo "<table width='100%'><tr><th bgcolor=\"#A08000\">\n";
echo "<font color=\"#FFFFFF\">�Ǘ����[�h</font>\n";
echo "</th></tr></table>\n";
if (!$pass) {
echo "<P><center><h4>�p�X���[�h����͂��ĉ�����</h4>\n";
echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" �F�� \"></form>\n";
}else {
// �摜����
if ($chk) {
// �摜�����}�b�`���O���X�V
$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;
}
// ���O���X�V
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($pushlog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
}
// �폜����
if ($del) {
// �폜�����}�b�`���O���X�V
$delall = file($logfile);
$flag = 0;
while(list(,$delline)=each($delall)){
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$tail")){
unlink("$path$tail"); }
continue;
}
if($flag == 0){ $dellog[]=$delline; }
}
// ���O���X�V
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($dellog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
}
// �폜��ʂ�\��
echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>�폜�������L���̃`�F�b�N�{�b�N�X�Ƀ`�F�b�N�����A�폜�{�^���������ĉ������B\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr><th>�폜</th><th>�L��No</th><th>���e��</th><th>�薼</th>";
echo "<th>���e��</th><th>�R�����g</th><th>�z�X�g��</th><th>�Y�t<br>(Bytes)</th>";
if ($ImageCheck) { echo "<th>�摜<br>����</th>"; }
echo "</tr>\n";
$delmode = file($logfile);
while (list(,$val)=each($delmode)){
$img_flag=0;
list($no,$date,$name,$mail,$sub,$com,$url,
$host,$pw,$tail,$w,$h,$time,$chk) = explode("<>",$val);
list($date,$dmy) = split("\(", $date);
if ($mail) { $name="<a href=\"mailto:$mail\">$name</a>"; }
$com = str_replace("<br>","",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40){ $com = substr($com,0,38) . " ..."; }
if (file_exists("$path$tail")) {
$img_flag = 1;
$clip = "<a href=\"$path$tail\" target='_blank'>$File</a>";
$size = filesize("$path$tail");
$all += $size;
} else {
$clip = "";
$size = 0;
}
echo "<tr><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$date</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
// �摜����
if ($ImageCheck) {
if ($img_flag == 1 && $chk == 1) {
echo "<th><font color=red>OK</font></th>";
} elseif ($img_flag == 1 && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
} else {
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
echo "</table>\n";
echo "<P><input type=submit value=\"�폜����\">";
echo "<input type=reset value=\"���Z�b�g\"></form>\n";
$all = (int)($all / 1024);
echo "�y�Y�t�f�[�^���� �F <b>$all</b> KB�z\n";
}
echo "</center>\n";
die ("</body></html>");
}
function MakeHtml(){ //HTML����
global $html_file;
head($buf);
Main($buf);
foot($buf);
$hp = fopen ($html_file,"w");
flock($hp,2);
fputs($hp, $buf);
fclose($hp);
include("$html_file");
exit;
}
function error($mes){ //�G���[�t�H�[�}�b�g
?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis"></head>
<body bgcolor="#f9f9ce" text="#1A1A1A">
<br><br><hr size=1><br><br>
<center><font color=red size=5><b><? echo $mes; ?></b></font></center>
<br><br><hr size=1></body></html>
<?
exit;
}
/*======Main======*/
switch($mode):
case 'regist':
regist();
if($HTML) MakeHtml();
echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL='.$PHP_SELF.'">';
break;
case 'admin':
admin();
break;
case 'usrdel':
usrdel();
if($HTML) MakeHtml();
break;
default:
head($buf);
Main($buf);
foot($buf);
echo $buf;
break;
endswitch;
?>
BIN
View File
Binary file not shown.
+571
View File
@@ -0,0 +1,571 @@
<?
/*
* �摜BBS by ToR
* http://php.s3.to
*
* �摜�n���R�f���‚ł��BJPG�AGIF�APNG�̂ݱ���۰�މ”\
*
* �ۑ��p�f�B���N�g���uimg�v���쐬���ď������ݑ����i717���j��ݒ肵�Ă�������
* �ŋ߂̖����T�[�o��SAFE MODE���ݒ肳��Ă��鏊���������ߎg����ꏊ�͌����܂��B
* OK->http://www.coolfreehost.com http://www.saxen.net
*
*2000/10/26 v1.0 �Ƃ肠��������
*2000/10/18 v1.1 URL�A���[����\���A��
*2000/11/28 v1.2 �폜�@�\
*2000/11/30 v2.0 �Ǘ��@�\�A�摜�`�F�b�N�i���O���ڒlj��j��
*2001/03/17 v2.1 �����Ĉ�‚ɁA�摜�ۑ��������ԁ����[�J����
*2001/06/30 v2.2 Win�t�@�C��������p�X\\������
*2001/07/17 v2.3 �Ǘ��p�X���޸ޏC���A��
*/
//-------------�ݒ肱������-------------
# �f���‚̃^�C�g��
$title = '�摜BBS�`��';
# �Ǘ��җp�p�X���[�h�B�K���ύX���ĉ������B
$admin_pass = 'asdfg';
# �t�@�C�����A�b�v���[�h����f�B���N�g��
# �Ō�� / �ɂ��ĉ������B
$up_dir = '/img/';
# �A�b�v���[�h����f�B���N�g���̐�΃p�X
$path = dirname($PATH_TRANSLATED).$up_dir;
# ���O�ۑ��t�@�C��
$logfile = 'imglog.log';
# html�ɏ����o�����ǂ���
$HTML = 0;
# �ÓIHTML�������o���ꍇ��HTML�t�@�C��
$html_file = '';
# ��y�[�W������̕\���L����
$page_def = 7;
# �ő�L�^���� ������z����ƌÂ������珇�ɍ폜����܂��B
$max = 200;
# �摜�t�@�C���� <IMG> �^�O�Œ��ڕ\�����邩�ǂ��� 1 �ŕ\�� 0 �ŕ\�����Ȃ�
$show_img = 1;
# ����z�X�g����̘A�����e�𐧌�
# --> �b�����L�q����Ƃ��̎��Ԉȏ���o�߂��Ȃ��ƘA�����e�ł��Ȃ�
$w_regist = 0;
# �Ǘ��҂����‚����摜�̂ݕ\���i�`�F�b�N���Ă���F1,���ׂĕ\���F0�j
$ImageCheck = 0;
# ���1�̏ꍇ�A�`�F�b�N����ĂȂ��摜�̑�։摜
$IconSoon = './soon.gif';
# �摜�t�@�C���̍ő�\���̑傫���i�P�ʁF�s�N�Z���j
# --> ����𒴂���摜�͏k���\�����܂�
$MaxW = 300; # ����
$MaxH = 300; # �c��
# �A�b�v���[�h�”\�ȍő�T�C�Y�i�P�� : KB�j
# -->php.ini�܂���php_upload_max_filesize�ɂ��܂����A
# �f�t�H���g�l�ł���Q���K�ȏ�͐ݒ�ł��܂���B
$maxbyte = 150;
// ������HP�i�����N�j
$HOME = "http://php.s3.to/";
//---------�ݒ肱���܂�--------------
$maxsize = $maxbyte * 1024; //�o�C�g�ɕϊ�
function head(&$dat){ //�w�b�_�[�\����
global $mode,$no,$PHP_SELF,$logfile,$maxsize,$maxbyte,$MaxW,$MaxH,$title,$HOME;
if($mode == "resmsg"){ //���X�̏ꍇ
$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("�Y���L�������‚���܂���");
$r_sub = "Re:$sub";
$r_com = "&gt;$com";
$r_com = eregi_replace("<br />","\r&gt;",$r_com);
}
$dat='<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.$title.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.$HOME.'" target="_top">�g�b�v�ɖ߂�</a>]
[<a href="'.$PHP_SELF.'?mode=admin">�Ǘ��p</a>]
</p>
<center><!--�㕔�o�i�[--><P>
<font color="#800000" face="�l�r �o�S�V�b�N" size=5><b><SPAN>'.$title.'</SPAN></b></font>
<hr width="90%" size=1>
<form action="'.$PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>���Ȃ܂�</b></td>
<td><input type=text name=name size="28" value=""></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�d���[��</b></td>
<td><input type=text name=email size="28" value=""></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>��@�@��</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="���M����"><input type=reset value="���Z�b�g">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�R�����g</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�t�q�k</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�Y�tFile</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>�폜�L�[</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="">
<small>(�L���̍폜�p�B�p������8�����ȓ�)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>�Y�t�”\�t�@�C�� �F GIF, JPG, PNG<br>
<LI>�u���E�U�ɂ���Ă͐���ɓY�t�ł��Ȃ����Ƃ�����܂��B<br>
<LI>�ő哊�e�f�[�^�ʂ� '.$maxbyte.'KB �܂łł��B<br>
<LI>�摜�͉� '.$MaxW.'�s�N�Z���A�c '.$MaxH.'�s�N�Z���𒴂���Ək���\������܂��B</small>
</td></tr></table></form></center>
<hr>';
}
function foot(&$dat){ //�t�b�^�[�\����
global $PHP_SELF;
$dat.='<table align=right><tr>
<td nowrap align=center><form action="'.$PHP_SELF.'" method="POST">
<input type=hidden name=mode value="usrdel">
�y�L���폜�z<br>
�L��No<input type=text name=no size=3>
�폜�L�[<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="�폜">
</form></td>
</tr></table><br clear=all>
<center><!--�����o�i�[--><P><small><!-- GazouBBS v2.0 -->
- <a href="http://php.s3.to" target="_top">GazouBBS</a> -
</small></center>
</body></html>';
}
function Main(&$dat){ //�L���\����
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,$imgfile,$W,$H,$time2,$chk) = explode("<>", $view[$s]);
if($url) { $url = "<a href=\"http://$url\" target=\"_blank\">HOME</a>"; }
if($mail){ $name = "<a href=\"mailto:$mail\">$name</a>"; }
$com = eregi_replace("(^|/>)(&gt;[^<]*)", "\\1<font color=789922>\\2</font>", $com);
if ($imgfile && file_exists("$path$imgfile")) {
if ($ImageCheck && $chk != 1) {
$dat.="<P><img src=\"$IconSoon\">";
} elseif ($W && $H) {
$dat.="<P><a href=\".$up_dir$imgfile\" target='_blank'><img src=\".$up_dir$imgfile\" width=$W height=$H border=0 align=left hspace=20></a>";
} else {
$dat.= "<P><a href=\".$up_dir$imgfile\" target='_blank'><img src=\".$up_dir$imgfile\" border=0 align=left hspace=20></a>";
}
}
$dat.="No.$no <font color=\"#cc1105\" size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=\"#117743\"><b>$name</b></font> Date $date ";
$dat.="[<a href=\"$PHP_SELF?mode=resmsg&no=$no\">RES</a>] &nbsp; $url <p>";
$dat.="<blockquote>\n";
$dat.="$com</blockquote><br clear=left><hr>\n";
$p++;
} //end for
if(($logsize > $page_def) && ($p >= $page_def)){
$dat.="<table align=left><tr>\n";
$dat.="<td><form action=$PHP_SELF?page=$end method=POST>";
$dat.="<input type=submit value=\"���̃y�[�W\" name=submit>\n";
$dat.="</form></td>\n</tr></table>\n";
}
}
function regist(){ //���O��������
global $name,$email,$sub,$com,$url,$MaxW,$MaxH,$source_name;
global $pwd,$upfile,$html_url,$logfile,$jisa,$max,$w_regist,$path;
// �t�H�[�����e���`�F�b�N
if(empty($com)){ error("�{�����������܂�Ă��܂���"); }
if(empty($name)){ error("���O���L������Ă��܂���"); }
if(empty($sub)){ $sub="�i����j"; }
$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("��d���e�͋֎~�ł�");
if ($w_regist && $times - $ttime < $w_regist)
error("�A�����e�͂������΂炭���Ԃ�u���Ă��炨�肢�v���܂�");
// �L��No���̔�
$no = $tno + 1;
// �z�X�g�����擾
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host == "" || $host == $addr) $host=@gethostbyaddr($addr);
// �폜�L�[���Í���
if ($pwd) { $PW = crypt(($pwd),aa); }
// URL���������N
if ($autolink) { auto_link($com); }
// �ő�L��������
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 = gmdate( "Y/m/d(D) H:i",time()+9*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); //���s�����̓���B
$com = str_replace( "\r", "\n", $com);
$com = ereg_replace("\n((�@| |\t)*\n){3,}","\n",$com);//�A�������s����s
$com = nl2br($com); //���s�����̑O��<br>��������B
$com = ereg_replace( "\n", "", $com); //\n�𕶎��񂩂�����B
$times = time();
if ($upfile) {
$fname=UpFile();
$size = @getimagesize("$path$fname");
$W=$size[0];$H=$size[1];
// �摜�\���k��
if ($W > $MaxW || $H > $MaxH) {
$W2 = $MaxW / $W;
$H2 = $MaxH / $H;
($W2 < $H2) ? $key = $W2 : $key = $H2;
$W = (int) $W * $key;
$H = (int) $H * $key;
}
}
$new_msg="$no<>$now<>$name<>$email<>$sub<>$com<>$url<>$host<>$PW<>$fname<>$W<>$H<>$times<><>\n";
$fp = fopen($logfile,"a");
flock($fp,2);
fputs($fp, $new_msg);
flock($fp,3);
fclose($fp);
// ���[���ʒm����
// if ($mailing == 1) { mail_to(); }
}
function UpFile(){ //�A�b�v���[�h����
global $up_dir,$upfile,$upfile_name,$path;
$source = $upfile;
$source_name = $upfile_name;
//6/30
$source_name = ereg_replace("^(.:.*\\\\)?(.*)", "\\2", $source_name);
if(($source != "none")&&($source != "")){
$dest = $path.$source_name;
if(copy($source,$dest)){
echo "����";
$imagesize = getimagesize($dest);
switch($imagesize[2]) {
case 0:
error("�摜�ȊO�̓A�b�v���[�h�ł��܂���");
unlink($dest);
exit;
case 1:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "GIF�摜 �A�b�v���� �| $dest";
break;
case 2:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "JPG�摜 �A�b�v���� �| $dest";
break;
case 3:
echo " $imagesize[0] x $imagesize[1]<br>";
echo "PNG�摜 �A�b�v���� �| $dest";
break;
}
} else {
error("Upload �f�B���N�g���ɏ������ݎ��s\n");
}
unlink($source);
}
return $source_name;
}
function usrdel(){ //���[�U�[�폜
global $pwd,$no,$logfile,$path;
if ($no == "" || $pwd == "")
{ error("�폜No�܂��͍폜�L�[�����̓����ł�"); }
$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="$tail"; }
else { $pushlog[]=$lines; }
}
if ($flag == 0) { error("�Y���L������������܂���"); }
if ($PWD == "") { error("�Y���L���ɂ͍폜�L�[���ݒ肳��Ă��܂���"); }
// �폜�L�[���ƍ�
$match = crypt(($pwd),aa);
if ($match != $PWD) { error("�폜�L�[���Ⴂ�܂�"); }
// ���O���X�V
$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;
global $del,$pass,$chk;
if ($pass && $admin_pass != "$pass")
{ error("�p�X���[�h���Ⴂ�܂�"); }
?>
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:9pt; }
a:hover { color:#DD0000; }
span { font-size:20pt; }
small { font-size:9pt }
-->
</STYLE>
<?
echo "<title>$title</title></head>";
echo "<body bgcolor=\"#FFFFEE\" text=\"#800000\">";
echo "[<a href=\"$PHP_SELF\">�f���‚ɖ߂�</a>]\n";
echo "<table width='100%'><tr><th bgcolor=\"#A08000\">\n";
echo "<font color=\"#FFFFFF\">�Ǘ����[�h</font>\n";
echo "</th></tr></table>\n";
if (!$pass) {
echo "<P><center><h4>�p�X���[�h����͂��ĉ�����</h4>\n";
echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" �F�� \"></form>\n";
}else {
// �摜����
if ($chk) {
// �摜�����}�b�`���O���X�V
$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;
}
// ���O���X�V
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($pushlog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
}
// �폜����
if ($del) {
// �폜�����}�b�`���O���X�V
$delall = file($logfile);
$flag = 0;
while(list(,$delline)=each($delall)){
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$tail")){
unlink("$path$tail"); }
continue;
}
if($flag == 0){ $dellog[]=$delline; }
}
// ���O���X�V
$fp = fopen($logfile,"w");
flock($fp,2);
while(list(,$val)=each($dellog)){
fputs($fp,$val);
}
flock($fp,3);
fclose($fp);
}
// �폜��ʂ�\��
echo "<form action=\"$PHP_SELF\" method=\"POST\">\n";
echo "<input type=hidden name=mode value=\"admin\">\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>�폜�������L���̃`�F�b�N�{�b�N�X�Ƀ`�F�b�N�����A�폜�{�^���������ĉ������B\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr><th>�폜</th><th>�L��No</th><th>���e��</th><th>�薼</th>";
echo "<th>���e��</th><th>�R�����g</th><th>�z�X�g��</th><th>�Y�t<br>(Bytes)</th>";
if ($ImageCheck) { echo "<th>�摜<br>����</th>"; }
echo "</tr>\n";
$delmode = file($logfile);
while (list(,$val)=each($delmode)){
$img_flag=0;
list($no,$date,$name,$mail,$sub,$com,$url,
$host,$pw,$tail,$w,$h,$time,$chk) = explode("<>",$val);
list($date,$dmy) = split("\(", $date);
if ($mail) { $name="<a href=\"mailto:$mail\">$name</a>"; }
$com = str_replace("<br>","",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40){ $com = substr($com,0,38) . " ..."; }
if (file_exists("$path$tail")) {
$img_flag = 1;
$clip = "<a href=\"$path$tail\" target='_blank'>$File</a>";
$size = filesize("$path$tail");
$all += $size;
} else {
$clip = "";
$size = 0;
}
echo "<tr><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$date</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
// �摜����
if ($ImageCheck) {
if ($img_flag == 1 && $chk == 1) {
echo "<th><font color=red>OK</font></th>";
} elseif ($img_flag == 1 && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
} else {
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
echo "</table>\n";
echo "<P><input type=submit value=\"�폜����\">";
echo "<input type=reset value=\"���Z�b�g\"></form>\n";
$all = (int)($all / 1024);
echo "�y�Y�t�f�[�^���� �F <b>$all</b> KB�z\n";
}
echo "</center>\n";
die ("</body></html>");
}
function MakeHtml(){ //HTML����
global $html_file;
head($buf);
Main($buf);
foot($buf);
$hp = fopen ($html_file,"w");
flock($hp,2);
fputs($hp, $buf);
fclose($hp);
include("$html_file");
exit;
}
function error($mes){ //�G���[�t�H�[�}�b�g
?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis"></head>
<body bgcolor="#f9f9ce" text="#1A1A1A">
<br><br><hr size=1><br><br>
<center><font color=red size=5><b><? echo $mes; ?></b></font></center>
<br><br><hr size=1></body></html>
<?
exit;
}
/*======Main======*/
switch($mode):
case 'regist':
regist();
if($HTML) MakeHtml();
echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL='.$PHP_SELF.'">';
break;
case 'admin':
admin();
break;
case 'usrdel':
usrdel();
if($HTML) MakeHtml();
break;
default:
head($buf);
Main($buf);
foot($buf);
echo $buf;
break;
endswitch;
?>
BIN
View File
Binary file not shown.
+464
View File
@@ -0,0 +1,464 @@
<?php
/*************************************
* 画像BBS by ToR
*
* http://php.s3.to/
*
* 画像アップロード掲示板です。
*
* 保存用ディレクトリimgを作成して777にします。
* 空のログファイルimglog.logを用意して666にします。
* サーバーによってはアプロードできません
*
* 2001/09/27 v2.4 画像保存名をローカル→時間名、ページング
* 2001/10/31 v3.0 作り直し。管理者用投稿ページ作成。フォームも分離可
**************************************/
//----設定--------
define(LOGFILE, 'imglog2.log'); //ログファイル名
define(PATH, './img/'); //画像保存ディレクトリ./???/
define(TITLE, '画像BBS'); //タイトル(<title>と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, 1); //管理者がチェックしてから画像表示?yes=1
define(SOON_ICON, 'soon.jpg'); //チェック中の時の代替画像
define(BUNRI, 0); //投稿フォームを分離する?
define(PHP_SELF, $PHP_SELF); //このスクリプト名
/* ヘッダ */
function head(&$dat){
$dat.='
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.TITLE.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.HOME.'" target="_top">ホーム</a>]
[<a href="'.PHP_SELF.'?mode=admin">管理用</a>]
<p align=center>
<font color="#800000" face="MS Pゴシック" size=5>
<b><SPAN>'.TITLE.'</SPAN></b></font>
<hr width="90%" size=1>
';
}
/* 投稿フォーム */
function form(&$dat,$admin=""){
$maxbyte = MAX_KB * 1024;
if($admin){
$hidden = "<input type=hidden name=admin value=\"".ADMIN_PASS."\">";
$msg = "<h4>タグがつかえます</h4>";
}
$dat.='
<center>'.$msg.'
<form action="'.PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
'.$hidden.'
<input type=hidden name="MAX_FILE_SIZE" value="'.$maxbyte.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>おなまえ</b></td>
<td><input type=text name=name size="28"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>Eメール</b></td>
<td><input type=text name=email size="28"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>題  名</b></td>
<td>
<input type=text name=sub size="35">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>コメント</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft></textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.MAX_KB.' KB までです。<br>
<LI>画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。
</small>
</td></tr></table></form></center>
<hr>
';
}
/* 記事部分 */
function main(&$dat, $page){
$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 = "<a href=\"http://$url\" target=_blank>Link</a>";
if($email) $name = "<a href=\"mailto:$email\">$name</a>";
$com = eregi_replace("(^|/>)(&gt;[^<]*)", "\\1<font color=789922>\\2</font>", $com);
// 画像ファイル名
$img = PATH.$time.$ext;
/* 自由に変更してください["]=[\"]に */
// <imgタグ作成
$imgsrc = "";
if($ext && is_file($img)){
$size = ceil(filesize($img) / 1024);//altにサイズ表示
if(CHECK && $chk != 1){//未チェック
$imgsrc = "<img src=".SOON_ICON.">";
}elseif($w && $h){//サイズがある時
$imgsrc = "<a href=\"".$img."\" target=_blank><img src=".$img."
border=0 align=left width=$w height=$h hspace=20 alt=\"".$size." KB\"></a>";
}else{//それ以外
$imgsrc = "<a href=\"".$img."\" target=_blank><img src=".$img."
border=0 align=left hspace=20 alt=\"".$size." KB\"></a>";
}
}
// メイン作成
$dat.="No.$no <font color=#cc1105 size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=#117743><b>$name</b></font> Date $now &nbsp; $url";
$dat.="<p><blockquote>$imgsrc $com</blockquote><br clear=left><hr>\n";
$p++;
clearstatcache();//ファイルのstatをクリア
}
$prev = $st - PAGE_DEF;
$next = $st + PAGE_DEF;
// 改ページ処理
$dat.="<table align=left><tr>\n";
if($prev > 0){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$prev>";
$dat.="<input type=submit value=\"前のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
if($p >= PAGE_DEF && count($line) > PAGE_DEF){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$next>";
$dat.=" <input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
$dat.="</td>\n</tr></table>\n";
}
/* フッタ */
function foot(&$dat){
$dat.='
<table align=right><tr>
<td nowrap align=center><form action="'.PHP_SELF.'" method=POST>
<input type=hidden name=mode value=usrdel>
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><P><small><!-- GazouBBS v3.0 -->
- <a href="http://php.s3.to" target=_top>GazouBBS</a> -
</small></center>
</body></html>
';
}
/* 記事書き込み */
function regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name){
global $REQUEST_METHOD;
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;
$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); //改行文字の前に<br>を代入する
$com = str_replace("\n", "", $com); //\nを文字列から消す。
// 二重投稿チェック
if($name == $lname && $com == $lcom)
error("二重投稿は禁止です<br><br><a href=$PHP_SELF>リロード</a>");
// ログ行数オーバー
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;
copy($upfile, $dest);
if(!is_file($dest)) error("アップロードに失敗しました。サーバがサポートしていない可能性があります");
$size = getimagesize($dest);
$W = $size[0];
$H = $size[1];
rename($dest,$tim.$size[2]);
// 画像表示縮小
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 のアップロードが成功しました<br><br>";
}
$chk = (CHECK) ? 0 : 1;//未チェックは0
$newline = "$no,$now,$name,$email,$sub,$com,$url,$host,$pass,.$size[2],$W,$H,$tim,$chk,\n";
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, $newline);
fputs($fp, implode('', $line));
fclose($fp);
echo "$msg 画面を切り替えます";
echo "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF."?\">";
}
/* テキスト整形 */
function CleanStr($str){
global $admin;
$str = trim($str);//先頭と末尾の空白除去
if (get_magic_quotes_gpc()) {//¥を削除
$str = stripslashes($str);
}
if($admin!=ADMIN_PASS){//管理者はタグ可能
$str = htmlspecialchars($str, ENT_QUOTES, 'Shift_JIS');//タグっ禁止
$str = str_replace("&amp;", "&", $str);//特殊文字
}
return str_replace(",", "&#44;", $str);//カンマを変換
}
/* ユーザー削除 */
function usrdel($no,$pwd){
if($no == "" || $pwd == "") error("削除Noまたはパスワードが入力漏れです");
$line = file(LOGFILE);
$flag = FALSE;
for($i = 0; $i<count($line); $i++){
list($dno,,,,,,,,$pass,$dext,,,$dtim,) = explode(",", $line[$i]);
if($no == $dno && substr(md5($pwd,2,8)) == $pass){
$flag = TRUE;
$line[$i] = ""; //パスワードがマッチした行は空に
$delfile = PATH.$dtim.$dext; //削除ファイル
break;
}
}
if(!$flag) error("該当記事が見つからないかパスワードが間違っています");
// ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
if(is_file($delfile)) unlink($delfile);//削除
}
/* パス認証 */
function valid($pass){
if($pass && $pass != ADMIN_PASS) error("パスワードが違います");
head($dat);
echo $dat;
echo "[<a href=\"".PHP_SELF."\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=#E08000>\n";
echo "<font color=#FFFFFF>管理モード</font>\n";
echo "</th></tr></table>\n";
echo "<p><form action=\"".PHP_SELF."\" method=POST>\n";
// ログインフォーム
if(!$pass){
echo "<center><input type=radio name=admin value=del checked>記事削除 ";
echo "<input type=radio name=admin value=post>管理人投稿<p>";
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form></center>\n";
die("</body></html>");
}
}
/* 管理者削除 */
function admindel($delno,$chkno){
global $pass;
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] = "";
break;
}
}
if($find){//ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
}
}
// 削除画面を表示
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if(CHECK) echo "<th>画像<br>許可</th>";
echo "</tr>\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="<a href=\"mailto:$email\">$name</a>";
$com = str_replace("<br />"," ",$com);
$com = htmlspecialchars($com, ENT_QUOTES, 'Shift_JIS');
if(strlen($com) > 40) $com = substr($com,0,38) . " ...";
// 画像があるときはリンク
if($ext && is_file(PATH.$time.$ext)){
$img_flag = TRUE;
$clip = "<a href=\"".PATH.$time.$ext."\" target=_blank>".$time.$ext."</a>";
$size = filesize(PATH.$time.$ext);
$all += $size; //合計計算
}else{
$clip = "";
$size = 0;
}
$bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色
echo "<tr bgcolor=$bg><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$now</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
if(CHECK){//画像チェック
if($img_flag && $chk == 1){
echo "<th><font color=red>OK</font></th>";
}elseif($img_flag && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
}else{
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
if(CHECK) $msg = "or許可する";
echo "</table><p><input type=submit value=\"削除する$msg\">";
echo "<input type=reset value=\"リセット\"></form>";
$all = (int)($all / 1024);
echo "【 画像データ合計 : <b>$all</b> KB 】";
die("</center></body></html>");
}
/* エラー画面 */
function error($mes){
global $upfile_name;
if(is_file(PATH.$upfile_name)) unlink(PATH.$upfile_name);
head($dat);
echo $dat;
echo "<br><br><hr size=1><br><br>
<center><font color=red size=5><b>$mes</b></font></center>
<br><br><hr size=1>";
die("</body></html>");
}
/*-----------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);
if($admin=="post"){
echo "</form>";
form($post,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
break;
default:
head($buf);
if(!BUNRI) form($buf);
main($buf,$page);
foot($buf);
echo $buf;
}
?>
View File
Whitespace-only changes.
BIN
View File
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
<?php
/*******
* 画像BBSをセーフモードでもつかっちゃおう!なスクリプツ
*
* 通常のフリーサーバーではセーフモードというphpにセキュリチーがかかっていて
* アップロード出来ません。(一時テンポラリに書き込めない)
* でも!copyをすると権限が変わりアプロードも可能になる・はず・・なスクリプツ
*/
$script = "gazou.php";
$logfile= "imglog.log";
copy($script,$script.".bak");
copy($logfile,$logfile.".bak");
rename($script.".bak",$script);
rename($logfile.".bak",$logfile);
echo "success!!!";
?>
+527
View File
@@ -0,0 +1,527 @@
<?php
/*************************************
* 画像BBS by ToR
*
* http://php.s3.to/
*
* 画像アップロード掲示板です。
*
* 保存用ディレクトリimgを作成して777にします。
* 空のログファイルimglog.logを用意して666にします。
* サーバーによってはアプロードできません
*
* 2001/09/27 v2.4 画像保存名をローカル→時間名、ページング
* 2001/10/31 v3.0 作り直し。管理者用投稿ページ作成。フォームも分離可
* 2001/11/05 v3.1 バグたくさん修正、レス追加
* 2002/05/19 v3.2 削除関連のバグ修正 copy→move_uploded_file
**************************************/
//----設定--------
// PHP4.1.2以上で動かない場合以下の//を取る
//extract($_POST);
//extract($_GET);
//extract($_COOKIE);
//extract($_SERVER);
//extract($_FILES);
define(LOGFILE, 'imglog.log'); //ログファイル名
define(IMG_DIR, '/img/'); //画像保存ディレクトリ。gazou.phpから見て
define(TITLE, '画像BBS'); //タイトル(<title>と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.='
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.TITLE.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.HOME.'" target="_top">ホーム</a>]
[<a href="'.PHP_SELF.'?mode=admin">管理用</a>]
<p align=center>
<font color="#800000" face="MS Pゴシック" size=5>
<b><SPAN>'.TITLE.'</SPAN></b></font>
<hr width="90%" size=1>
';
}
/* 投稿フォーム */
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 = "&gt;$com";
$r_com = ereg_replace("<br( /)?>","\r&gt;",$r_com);
$msg = "<h5>No. $no へのレスです</h5>";
}
if($admin){
$hidden = "<input type=hidden name=admin value=\"".ADMIN_PASS."\">";
$msg = "<h4>タグがつかえます</h4>";
}
$dat.='
<center>'.$msg.'
<form action="'.PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
'.$hidden.'
<input type=hidden name="MAX_FILE_SIZE" value="'.$maxbyte.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>おなまえ</b></td>
<td><input type=text name=name size="28" value="'.$cname.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>Eメール</b></td>
<td><input type=text name=email size="28" value="'.$cemail.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>題  名</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>コメント</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="'.$cpass.'">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.MAX_KB.' KB までです。<br>
<LI>画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。
</small>
</td></tr></table></form></center>
<hr>
';
}
/* 記事部分 */
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 = "<a href=\"http://$url\" target=_blank>Link</a>";
if($email) $name = "<a href=\"mailto:$email\">$name</a>";
$com = auto_link($com);
$com = eregi_replace("(^|>)(&gt;[^<]*)", "\\1<font color=".RE_COL.">\\2</font>", $com);
// 画像ファイル名
$img = $path.$time.$ext;
$src = '.'.IMG_DIR.$time.$ext;
/* 自由に変更してください["]=[\"]に */
// <imgタグ作成
$imgsrc = "";
if($ext && is_file($img)){
$size = ceil(filesize($img) / 1024);//altにサイズ表示
if(CHECK && $chk != 1){//未チェック
$imgsrc = "<img src=".SOON_ICON." hspace=20>";
}elseif($w && $h){//サイズがある時
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left width=$w height=$h hspace=20 alt=\"".$size." KB\"></a>";
}else{//それ以外
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left hspace=20 alt=\"".$size." KB\"></a>";
}
}
// メイン作成
$dat.="No.$no <font color=#cc1105 size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=#117743><b>$name</b></font> Date $now &nbsp; $url [<a href=".PHP_SELF."?res=$no>レス</a>]";
$dat.="<p><blockquote>$imgsrc $com</blockquote><br clear=left><hr>\n";
$p++;
clearstatcache();//ファイルのstatをクリア
}
$prev = $st - PAGE_DEF;
$next = $st + PAGE_DEF;
// 改ページ処理
$dat.="<table align=left><tr>\n";
if($prev >= 0){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$prev>";
$dat.="<input type=submit value=\"前のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
if($p >= PAGE_DEF && count($line) > $next){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$next>";
$dat.=" <input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
$dat.="</td>\n</tr></table>\n";
}
/* フッタ */
function foot(&$dat){
$dat.='
<table align=right><tr>
<td nowrap align=center><form action="'.PHP_SELF.'" method=POST>
<input type=hidden name=mode value=usrdel>
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><P><small><!-- GazouBBS v3.0 -->
- <a href="http://php.s3.to" target=_top>GazouBBS</a> -
</small></center>
</body></html>
';
}
/* 記事書き込み */
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); //改行文字の前に<br>を代入する
$com = str_replace("\n", "", $com); //\nを文字列から消す。
// 二重投稿チェック
if($name == $lname && $com == $lcom)
error("二重投稿は禁止です<br><br><a href=$PHP_SELF>リロード</a>");
// ログ行数オーバー
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 のアップロードが成功しました<br><br>";
}
$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 "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF."?\">";
}
/* テキスト整形 */
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("&amp;", "&", $str);//特殊文字
}
return str_replace(",", "&#44;", $str);//カンマを変換
}
/* ユーザー削除 */
function usrdel($no,$pwd){
global $path;
if($no == "") error("削除Noが入力漏れです");
$line = file(LOGFILE);
$flag = FALSE;
for($i = 0; $i<count($line); $i++){
list($dno,,,,,,,,$pass,$dext,,,$dtim,) = explode(",", $line[$i]);
if($no == $dno) {
if(substr(md5($pwd),2,8) == $pass || ($pwd == '' && $pass == '*')){
$flag = TRUE;
$line[$i] = ""; //パスワードがマッチした行は空に
$delfile = $path.$dtim.$dext; //削除ファイル
break;
}
}
}
if(!$flag) error("該当記事が見つからないかパスワードが間違っています");
// ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
if(is_file($delfile)) unlink($delfile);//削除
}
/* パス認証 */
function valid($pass){
if($pass && $pass != ADMIN_PASS) error("パスワードが違います");
head($dat);
echo $dat;
echo "[<a href=\"".PHP_SELF."\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=#E08000>\n";
echo "<font color=#FFFFFF>管理モード</font>\n";
echo "</th></tr></table>\n";
echo "<p><form action=\"".PHP_SELF."\" method=POST>\n";
// ログインフォーム
if(!$pass){
echo "<center><input type=radio name=admin value=del checked>記事削除 ";
echo "<input type=radio name=admin value=post>管理人投稿<p>";
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form></center>\n";
die("</body></html>");
}
}
/* 管理者削除 */
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 "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if(CHECK) echo "<th>画像<br>許可</th>";
echo "</tr>\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="<a href=\"mailto:$email\">$name</a>";
$com = str_replace("<br />"," ",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40) $com = substr($com,0,38) . " ...";
// 画像があるときはリンク
if($ext && is_file($path.$time.$ext)){
$img_flag = TRUE;
$clip = "<a href=\".".IMG_DIR.$time.$ext."\" target=_blank>".$time.$ext."</a>";
$size = filesize($path.$time.$ext);
$all += $size; //合計計算
}else{
$clip = "";
$size = 0;
}
$bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色
echo "<tr bgcolor=$bg><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$now</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
if(CHECK){//画像チェック
if($img_flag && $chk == 1){
echo "<th><font color=red>OK</font></th>";
}elseif($img_flag && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
}else{
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
if(CHECK) $msg = "or許可する";
echo "</table><p><input type=submit value=\"削除する$msg\">";
echo "<input type=reset value=\"リセット\"></form>";
$all = (int)($all / 1024);
echo "【 画像データ合計 : <b>$all</b> KB 】";
die("</center></body></html>");
}
/* オートリンク */
function auto_link($proto){
$proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$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 "<br><br><hr size=1><br><br>
<center><font color=red size=5><b>$mes</b></font></center>
<br><br><hr size=1>";
die("</body></html>");
}
/*-----------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>";
form($post,$res,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
default:
head($buf);
if(!BUNRI) form($buf,$res);
main($buf,$page);
foot($buf);
echo $buf;
}
?>
View File
Whitespace-only changes.
BIN
View File
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
<?php
/*******
* 画像BBSをセーフモードでもつかっちゃおう!なスクリプツ
*
* 通常のフリーサーバーではセーフモードというphpにセキュリチーがかかっていて
* アップロード出来ません。(一時テンポラリに書き込めない)
* でも!copyをすると権限が変わりアプロードも可能になる・はず・・なスクリプツ
*/
$script = "gazou.php";
$logfile= "imglog.log";
copy($script,$script.".bak");
copy($logfile,$logfile.".bak");
rename($script.".bak",$script);
rename($logfile.".bak",$logfile);
echo "success!!!";
?>
+530
View File
@@ -0,0 +1,530 @@
<?php
/*************************************
* 画像BBS by ToR
*
* http://php.s3.to/
*
* 画像アップロード掲示板です。
*
* 保存用ディレクトリimgを作成して777にします。
* 空のログファイルimglog.logを用意して666にします。
* サーバーによってはアプロードできません
*
* 2001/09/27 v2.4 画像保存名をローカル→時間名、ページング
* 2001/10/31 v3.0 作り直し。管理者用投稿ページ作成。フォームも分離可
* 2001/11/05 v3.1 バグたくさん修正、レス追加
* 2002/05/19 v3.2 削除関連のバグ修正 copy→move_uploded_file(ダメならcopyに
* 2002/06/15 v3.3 画像以外のファイルがアップロード可能でした・・スイマセン 298行目
**************************************/
//----設定--------
// PHP4.1.2以上で動かない場合以下の//を取る
//extract($_POST);
//extract($_GET);
//extract($_COOKIE);
//extract($_SERVER);
//extract($_FILES);
define(LOGFILE, 'imglog.log'); //ログファイル名
define(IMG_DIR, '/img/'); //画像保存ディレクトリ。gazou.phpから見て
define(TITLE, '画像BBS'); //タイトル(<title>と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.='
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.TITLE.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.HOME.'" target="_top">ホーム</a>]
[<a href="'.PHP_SELF.'?mode=admin">管理用</a>]
<p align=center>
<font color="#800000" face="MS Pゴシック" size=5>
<b><SPAN>'.TITLE.'</SPAN></b></font>
<hr width="90%" size=1>
';
}
/* 投稿フォーム */
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 = "&gt;$com";
$r_com = ereg_replace("<br( /)?>","\r&gt;",$r_com);
$msg = "<h5>No. $no へのレスです</h5>";
}
if($admin){
$hidden = "<input type=hidden name=admin value=\"".ADMIN_PASS."\">";
$msg = "<h4>タグがつかえます</h4>";
}
$dat.='
<center>'.$msg.'
<form action="'.PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
'.$hidden.'
<input type=hidden name="MAX_FILE_SIZE" value="'.$maxbyte.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>おなまえ</b></td>
<td><input type=text name=name size="28" value="'.$cname.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>Eメール</b></td>
<td><input type=text name=email size="28" value="'.$cemail.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>題  名</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>コメント</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="'.$cpass.'">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.MAX_KB.' KB までです。<br>
<LI>画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。
</small>
</td></tr></table></form></center>
<hr>
';
}
/* 記事部分 */
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 = "<a href=\"http://$url\" target=_blank>Link</a>";
if($email) $name = "<a href=\"mailto:$email\">$name</a>";
$com = auto_link($com);
$com = eregi_replace("(^|>)(&gt;[^<]*)", "\\1<font color=".RE_COL.">\\2</font>", $com);
// 画像ファイル名
$img = $path.$time.$ext;
$src = '.'.IMG_DIR.$time.$ext;
/* 自由に変更してください["]=[\"]に */
// <imgタグ作成
$imgsrc = "";
if($ext && is_file($img)){
$size = ceil(filesize($img) / 1024);//altにサイズ表示
if(CHECK && $chk != 1){//未チェック
$imgsrc = "<img src=".SOON_ICON." hspace=20>";
}elseif($w && $h){//サイズがある時
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left width=$w height=$h hspace=20 alt=\"".$size." KB\"></a>";
}else{//それ以外
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left hspace=20 alt=\"".$size." KB\"></a>";
}
}
// メイン作成
$dat.="No.$no <font color=#cc1105 size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=#117743><b>$name</b></font> Date $now &nbsp; $url [<a href=".PHP_SELF."?res=$no>レス</a>]";
$dat.="<p><blockquote>$imgsrc $com</blockquote><br clear=left><hr>\n";
$p++;
clearstatcache();//ファイルのstatをクリア
}
$prev = $st - PAGE_DEF;
$next = $st + PAGE_DEF;
// 改ページ処理
$dat.="<table align=left><tr>\n";
if($prev >= 0){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$prev>";
$dat.="<input type=submit value=\"前のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
if($p >= PAGE_DEF && count($line) > $next){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$next>";
$dat.=" <input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
$dat.="</td>\n</tr></table>\n";
}
/* フッタ */
function foot(&$dat){
$dat.='
<table align=right><tr>
<td nowrap align=center><form action="'.PHP_SELF.'" method=POST>
<input type=hidden name=mode value=usrdel>
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><P><small><!-- GazouBBS v3.0 -->
- <a href="http://php.s3.to" target=_top>GazouBBS</a> -
</small></center>
</body></html>
';
}
/* 記事書き込み */
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); //改行文字の前に<br>を代入する
$com = str_replace("\n", "", $com); //\nを文字列から消す。
// 二重投稿チェック
if($name == $lname && $com == $lcom)
error("二重投稿は禁止です<br><br><a href=$PHP_SELF>リロード</a>");
// ログ行数オーバー
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(file_exists($upfile)){
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
//↑でエラーなら↓に変更
//copy($upfile, $dest);
if(!is_file($dest)) error("アップロードに失敗しました。<br>サーバがサポートしていない可能性があります");
$size = getimagesize($dest);
if(!is_array($size)) error("アップロードに失敗しました。<br>画像ファイル以外は受け付けません");
$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 のアップロードが成功しました<br><br>";
}
$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 "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF."?\">";
}
/* テキスト整形 */
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("&amp;", "&", $str);//特殊文字
}
return str_replace(",", "&#44;", $str);//カンマを変換
}
/* ユーザー削除 */
function usrdel($no,$pwd){
global $path;
if($no == "") error("削除Noが入力漏れです");
$line = file(LOGFILE);
$flag = FALSE;
for($i = 0; $i<count($line); $i++){
list($dno,,,,,,,,$pass,$dext,,,$dtim,) = explode(",", $line[$i]);
if($no == $dno) {
if(substr(md5($pwd),2,8) == $pass || ($pwd == '' && $pass == '*')){
$flag = TRUE;
$line[$i] = ""; //パスワードがマッチした行は空に
$delfile = $path.$dtim.$dext; //削除ファイル
break;
}
}
}
if(!$flag) error("該当記事が見つからないかパスワードが間違っています");
// ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
if(is_file($delfile)) unlink($delfile);//削除
}
/* パス認証 */
function valid($pass){
if($pass && $pass != ADMIN_PASS) error("パスワードが違います");
head($dat);
echo $dat;
echo "[<a href=\"".PHP_SELF."\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=#E08000>\n";
echo "<font color=#FFFFFF>管理モード</font>\n";
echo "</th></tr></table>\n";
echo "<p><form action=\"".PHP_SELF."\" method=POST>\n";
// ログインフォーム
if(!$pass){
echo "<center><input type=radio name=admin value=del checked>記事削除 ";
echo "<input type=radio name=admin value=post>管理人投稿<p>";
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form></center>\n";
die("</body></html>");
}
}
/* 管理者削除 */
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 "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if(CHECK) echo "<th>画像<br>許可</th>";
echo "</tr>\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="<a href=\"mailto:$email\">$name</a>";
$com = str_replace("<br />"," ",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40) $com = substr($com,0,38) . " ...";
// 画像があるときはリンク
if($ext && is_file($path.$time.$ext)){
$img_flag = TRUE;
$clip = "<a href=\".".IMG_DIR.$time.$ext."\" target=_blank>".$time.$ext."</a>";
$size = filesize($path.$time.$ext);
$all += $size; //合計計算
}else{
$clip = "";
$size = 0;
}
$bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色
echo "<tr bgcolor=$bg><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$now</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
if(CHECK){//画像チェック
if($img_flag && $chk == 1){
echo "<th><font color=red>OK</font></th>";
}elseif($img_flag && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
}else{
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
if(CHECK) $msg = "or許可する";
echo "</table><p><input type=submit value=\"削除する$msg\">";
echo "<input type=reset value=\"リセット\"></form>";
$all = (int)($all / 1024);
echo "【 画像データ合計 : <b>$all</b> KB 】";
die("</center></body></html>");
}
/* オートリンク */
function auto_link($proto){
$proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$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 "<br><br><hr size=1><br><br>
<center><font color=red size=5><b>$mes</b></font></center>
<br><br><hr size=1>";
die("</body></html>");
}
/*-----------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>";
form($post,$res,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
default:
head($buf);
if(!BUNRI) form($buf,$res);
main($buf,$page);
foot($buf);
echo $buf;
}
?>
View File
Whitespace-only changes.
BIN
View File
Binary file not shown.
+538
View File
@@ -0,0 +1,538 @@
<?php
/*************************************
* 画像BBS by ToR
*
* http://php.s3.to/
*
* 画像アップロード掲示板です。
*
* 保存用ディレクトリimgを作成して777にします。
* 空のログファイルimglog.logを用意して666にします。
* サーバーによってはアプロードできません
*
* 2001/09/27 v2.4 画像保存名をローカル→時間名、ページング
* 2001/10/31 v3.0 作り直し。管理者用投稿ページ作成。フォームも分離可
* 2001/11/05 v3.1 バグたくさん修正、レス追加
* 2002/05/19 v3.2 削除関連のバグ修正 copy→move_uploded_file(ダメならcopyに
* 2002/06/15 v3.3 画像以外のファイルがアップロード可能でした・・スイマセン 298行目
* 2002/01/25 v3.4 不正アップロード対策
* 2002/02/11 v3.5 クッキーの文字化け対策
**************************************/
if(phpversion()>="4.1.0"){
extract($_REQUEST);
extract($_COOKIE);
$upfile_name=$_FILES["upfile"]["name"];
$upfile=$_FILES["upfile"]["tmp_name"];
}
//----設定--------
define(LOGFILE, 'imglog.log'); //ログファイル名
define(IMG_DIR, '/img/'); //画像保存ディレクトリ。gazou.phpから見て
define(TITLE, '画像BBS'); //タイトル(<title>と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(NIKKI, 0); //投稿フォームを表示しない? Yes=1 No=0
define(PHP_SELF, "gazou.php"); //このスクリプト名;
//画像保存絶対パス $path="/home/public_html/***/img/";
$path = dirname($_SERVER[PATH_TRANSLATED]).IMG_DIR;
/* 未定
$badstring = array("dummy_string","dummy_string2"); //拒絶する文字列
$badfile = array("dummy","dummy2"); //拒絶するファイルのmd5
$badip = array("addr.dummy.com","addr2.dummy.com"); //拒絶するホスト
*/
/* ヘッダ */
function head(&$dat){
$dat.='
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.TITLE.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.HOME.'" target="_top">ホーム</a>]
[<a href="'.PHP_SELF.'?mode=admin">管理用</a>]
<p align=center>
<font color="#800000" face="MS Pゴシック" size=5>
<b><SPAN>'.TITLE.'</SPAN></b></font>
<hr width="90%" size=1>
';
}
/* 投稿フォーム */
function form(&$dat,$resno,$admin=""){
global $gazoubbs;
if (get_magic_quotes_gpc()) $gazoubbs = stripslashes($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 = "&gt;$com";
$r_com = ereg_replace("<br( /)?>","\r&gt;",$r_com);
$msg = "<h5>No. $no へのレスです</h5>";
}
if($admin){
$hidden = "<input type=hidden name=admin value=\"".ADMIN_PASS."\">";
$msg = "<h4>タグがつかえます</h4>";
}
$dat.='
<center>'.$msg.'
<form action="'.PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
'.$hidden.'
<input type=hidden name="MAX_FILE_SIZE" value="'.$maxbyte.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>おなまえ</b></td>
<td><input type=text name=name size="28" value="'.$cname.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>Eメール</b></td>
<td><input type=text name=email size="28" value="'.$cemail.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>題  名</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>コメント</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="'.$cpass.'">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.MAX_KB.' KB までです。<br>
<LI>画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。
</small>
</td></tr></table></form></center>
<hr>
';
}
/* 記事部分 */
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 = "<a href=\"http://$url\" target=_blank>Link</a>";
if($email) $name = "<a href=\"mailto:$email\">$name</a>";
$com = auto_link($com);
$com = eregi_replace("(^|>)(&gt;[^<]*)", "\\1<font color=".RE_COL.">\\2</font>", $com);
// 画像ファイル名
$img = $path.$time.$ext;
$src = '.'.IMG_DIR.$time.$ext;
/* 自由に変更してください["]=[\"]に */
// <imgタグ作成
$imgsrc = "";
if($ext && is_file($img)){
$size = ceil(filesize($img) / 1024);//altにサイズ表示
if(CHECK && $chk != 1){//未チェック
$imgsrc = "<img src=".SOON_ICON." hspace=20>";
}elseif($w && $h){//サイズがある時
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left width=$w height=$h hspace=20 alt=\"".$size." KB\"></a>";
}else{//それ以外
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left hspace=20 alt=\"".$size." KB\"></a>";
}
}
// メイン作成
$dat.="No.$no <font color=#cc1105 size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=#117743><b>$name</b></font> Date $now &nbsp; $url [<a href=".PHP_SELF."?res=$no>レス</a>]";
$dat.="<p><blockquote>$imgsrc $com</blockquote><br clear=left><hr>\n";
$p++;
clearstatcache();//ファイルのstatをクリア
}
$prev = $st - PAGE_DEF;
$next = $st + PAGE_DEF;
// 改ページ処理
$dat.="<table align=left><tr>\n";
if($prev >= 0){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$prev>";
$dat.="<input type=submit value=\"前のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
if($p >= PAGE_DEF && count($line) > $next){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$next>";
$dat.=" <input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
$dat.="</td>\n</tr></table>\n";
}
/* フッタ */
function foot(&$dat){
$dat.='
<table align=right><tr>
<td nowrap align=center><form action="'.PHP_SELF.'" method=POST>
<input type=hidden name=mode value=usrdel>
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><P><small><!-- GazouBBS v3.5 -->
- <a href="http://php.s3.to" target=_top>GazouBBS</a> -
</small></center>
</body></html>
';
}
/* 記事書き込み */
function regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name){
global $REQUEST_METHOD,$path;
// フォーム内容をチェック
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); //改行文字の前に<br>を代入する
$com = str_replace("\n", "", $com); //\nを文字列から消す。
// 二重投稿チェック
if($name == $lname && $com == $lcom)
error("二重投稿は禁止です<br><br><a href=$PHP_SELF>リロード</a>");
// ログ行数オーバー
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(file_exists($upfile)){
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
//↑でエラーなら↓に変更
//copy($upfile, $dest);
if(!is_file($dest)) error("アップロードに失敗しました。<br>サーバがサポートしていない可能性があります");
$size = @getimagesize($dest);
if($size[2]=="") error("アップロードに失敗しました。<br>画像ファイル以外は受け付けません");
$W = $size[0];
$H = $size[1];
$ext = substr($upfile_name,-4);
if ($ext == ".php" || $ext == "php3" || $ext == "php4" || $ext == "html") error("アップロードに失敗しました。<br>画像ファイル以外は受け付けません");
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 のアップロードが成功しました<br><br>";
}
$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 "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF."?\">";
}
/* テキスト整形 */
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("&amp;", "&", $str);//特殊文字
}
return str_replace(",", "&#44;", $str);//カンマを変換
}
/* ユーザー削除 */
function usrdel($no,$pwd){
global $path;
if($no == "") error("削除Noが入力漏れです");
$line = file(LOGFILE);
$flag = FALSE;
for($i = 0; $i<count($line); $i++){
list($dno,,,,,,,,$pass,$dext,,,$dtim,) = explode(",", $line[$i]);
if($no == $dno) {
if(substr(md5($pwd),2,8) == $pass || ($pwd == '' && $pass == '*')){
$flag = TRUE;
$line[$i] = ""; //パスワードがマッチした行は空に
$delfile = $path.$dtim.$dext; //削除ファイル
break;
}
}
}
if(!$flag) error("該当記事が見つからないかパスワードが間違っています");
// ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
if(is_file($delfile)) unlink($delfile);//削除
}
/* パス認証 */
function valid($pass){
if($pass && $pass != ADMIN_PASS) error("パスワードが違います");
head($dat);
echo $dat;
echo "[<a href=\"".PHP_SELF."\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=#E08000>\n";
echo "<font color=#FFFFFF>管理モード</font>\n";
echo "</th></tr></table>\n";
echo "<p><form action=\"".PHP_SELF."\" method=POST>\n";
// ログインフォーム
if(!$pass){
echo "<center><input type=radio name=admin value=del checked>記事削除 ";
echo "<input type=radio name=admin value=post>管理人投稿<p>";
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form></center>\n";
die("</body></html>");
}
}
/* 管理者削除 */
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 "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if(CHECK) echo "<th>画像<br>許可</th>";
echo "</tr>\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="<a href=\"mailto:$email\">$name</a>";
$com = str_replace("<br />"," ",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40) $com = substr($com,0,38) . " ...";
// 画像があるときはリンク
if($ext && is_file($path.$time.$ext)){
$img_flag = TRUE;
$clip = "<a href=\".".IMG_DIR.$time.$ext."\" target=_blank>".$time.$ext."</a>";
$size = filesize($path.$time.$ext);
$all += $size; //合計計算
}else{
$clip = "";
$size = 0;
}
$bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色
echo "<tr bgcolor=$bg><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$now</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
if(CHECK){//画像チェック
if($img_flag && $chk == 1){
echo "<th><font color=red>OK</font></th>";
}elseif($img_flag && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
}else{
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
if(CHECK) $msg = "or許可する";
echo "</table><p><input type=submit value=\"削除する$msg\">";
echo "<input type=reset value=\"リセット\"></form>";
$all = (int)($all / 1024);
echo "【 画像データ合計 : <b>$all</b> KB 】";
die("</center></body></html>");
}
/* オートリンク */
function auto_link($proto){
$proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$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 "<br><br><hr size=1><br><br>
<center><font color=red size=5><b>$mes</b></font></center>
<br><br><hr size=1>";
die("</body></html>");
}
/*-----------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>";
form($post,$res,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
default:
head($buf);
if(!NIKKI) form($buf,$res);
main($buf,$page);
foot($buf);
echo $buf;
}
?>
View File
Whitespace-only changes.
BIN
View File
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
<?php
/*******
* 画像BBSをセーフモードでもつかっちゃおう!なスクリプツ
*
* 通常のフリーサーバーではセーフモードというphpにセキュリチーがかかっていて
* アップロード出来ません。(一時テンポラリに書き込めない)
* でも!copyをすると権限が変わりアプロードも可能になる・はず・・なスクリプツ
*/
$script = "gazou.php";
$logfile= "imglog.log";
copy($script,$script.".bak");
copy($logfile,$logfile.".bak");
rename($script.".bak",$script);
rename($logfile.".bak",$logfile);
echo "success!!!";
?>
+538
View File
@@ -0,0 +1,538 @@
<?php
/*************************************
* 画像BBS by ToR
*
* http://php.s3.to/
*
* 画像アップロード掲示板です。
*
* 保存用ディレクトリimgを作成して777にします。
* 空のログファイルimglog.logを用意して666にします。
* サーバーによってはアプロードできません
*
* 2001/09/27 v2.4 画像保存名をローカル→時間名、ページング
* 2001/10/31 v3.0 作り直し。管理者用投稿ページ作成。フォームも分離可
* 2001/11/05 v3.1 バグたくさん修正、レス追加
* 2002/05/19 v3.2 削除関連のバグ修正 copy→move_uploded_file(ダメならcopyに
* 2002/06/15 v3.3 画像以外のファイルがアップロード可能でした・・スイマセン 298行目
* 2002/01/25 v3.4 不正アップロード対策
* 2002/02/11 v3.5 クッキーの文字化け対策
**************************************/
if(phpversion()>="4.1.0"){
extract($_REQUEST);
extract($_COOKIE);
$upfile_name=$_FILES["upfile"]["name"];
$upfile=$_FILES["upfile"]["tmp_name"];
}
//----設定--------
define(LOGFILE, 'imglog.log'); //ログファイル名
define(IMG_DIR, '/img/'); //画像保存ディレクトリ。gazou.phpから見て
define(TITLE, '画像BBS'); //タイトル(<title>と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(NIKKI, 0); //投稿フォームを表示しない? Yes=1 No=0
define(PHP_SELF, "gazou.php"); //このスクリプト名;
//画像保存絶対パス $path="/home/public_html/***/img/";
$path = dirname($_SERVER[PATH_TRANSLATED]).IMG_DIR;
/* 未定
$badstring = array("dummy_string","dummy_string2"); //拒絶する文字列
$badfile = array("dummy","dummy2"); //拒絶するファイルのmd5
$badip = array("addr.dummy.com","addr2.dummy.com"); //拒絶するホスト
*/
/* ヘッダ */
function head(&$dat){
$dat.='
<html><head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-size:10pt }
a:hover { color:#DD0000; }
span { font-size:20pt }
small { font-size:8pt }
-->
</STYLE>
<title>'.TITLE.'</title></head>
<body bgcolor="#FFFFEE" text="#800000" link="#0000EE" vlink="#0000EE">
<p align=right>
[<a href="'.HOME.'" target="_top">ホーム</a>]
[<a href="'.PHP_SELF.'?mode=admin">管理用</a>]
<p align=center>
<font color="#800000" face="MS Pゴシック" size=5>
<b><SPAN>'.TITLE.'</SPAN></b></font>
<hr width="90%" size=1>
';
}
/* 投稿フォーム */
function form(&$dat,$resno,$admin=""){
global $gazoubbs;
if (get_magic_quotes_gpc()) $gazoubbs = stripslashes($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 = "&gt;$com";
$r_com = ereg_replace("<br( /)?>","\r&gt;",$r_com);
$msg = "<h5>No. $no へのレスです</h5>";
}
if($admin){
$hidden = "<input type=hidden name=admin value=\"".ADMIN_PASS."\">";
$msg = "<h4>タグがつかえます</h4>";
}
$dat.='
<center>'.$msg.'
<form action="'.PHP_SELF.'" method="POST" enctype="multipart/form-data">
<input type=hidden name=mode value="regist">
'.$hidden.'
<input type=hidden name="MAX_FILE_SIZE" value="'.$maxbyte.'">
<table cellpadding=1 cellspacing=1>
<tr>
<td bgcolor=#eeaa88><b>おなまえ</b></td>
<td><input type=text name=name size="28" value="'.$cname.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>Eメール</b></td>
<td><input type=text name=email size="28" value="'.$cemail.'"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>題  名</b></td>
<td>
<input type=text name=sub size="35" value="'.$r_sub.'">
<input type=submit value="送信する"><input type=reset value="リセット">
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>コメント</b></td>
<td><textarea name=com cols="48" rows="4" wrap=soft>'.$r_com.'</textarea>
</td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>URL</b></td>
<td><input type=text name=url size="63" value="http://"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>添付File</b></td>
<td><input type=file name=upfile size="35"></td>
</tr>
<tr>
<td bgcolor=#eeaa88><b>削除キー</b></td>
<td>
<input type=password name=pwd size=8 maxlength=8 value="'.$cpass.'">
<small>(記事の削除用。英数字で8文字以内)</small>
</td>
</tr>
<tr><td colspan=2>
<small>
<LI>添付可能ファイル : GIF, JPG, PNG<br>
<LI>ブラウザによっては正常に添付できないことがあります。<br>
<LI>最大投稿データ量は '.MAX_KB.' KB までです。<br>
<LI>画像は横 '.MAX_W.'ピクセル、縦 '.MAX_H.'ピクセルを超えると縮小表示されます。
</small>
</td></tr></table></form></center>
<hr>
';
}
/* 記事部分 */
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 = "<a href=\"http://$url\" target=_blank>Link</a>";
if($email) $name = "<a href=\"mailto:$email\">$name</a>";
$com = auto_link($com);
$com = eregi_replace("(^|>)(&gt;[^<]*)", "\\1<font color=".RE_COL.">\\2</font>", $com);
// 画像ファイル名
$img = $path.$time.$ext;
$src = '.'.IMG_DIR.$time.$ext;
/* 自由に変更してください["]=[\"]に */
// <imgタグ作成
$imgsrc = "";
if($ext && is_file($img)){
$size = ceil(filesize($img) / 1024);//altにサイズ表示
if(CHECK && $chk != 1){//未チェック
$imgsrc = "<img src=".SOON_ICON." hspace=20>";
}elseif($w && $h){//サイズがある時
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left width=$w height=$h hspace=20 alt=\"".$size." KB\"></a>";
}else{//それ以外
$imgsrc = "<a href=\"".$src."\" target=_blank><img src=".$src."
border=0 align=left hspace=20 alt=\"".$size." KB\"></a>";
}
}
// メイン作成
$dat.="No.$no <font color=#cc1105 size=+1><b>$sub</b></font><br> ";
$dat.="Name <font color=#117743><b>$name</b></font> Date $now &nbsp; $url [<a href=".PHP_SELF."?res=$no>レス</a>]";
$dat.="<p><blockquote>$imgsrc $com</blockquote><br clear=left><hr>\n";
$p++;
clearstatcache();//ファイルのstatをクリア
}
$prev = $st - PAGE_DEF;
$next = $st + PAGE_DEF;
// 改ページ処理
$dat.="<table align=left><tr>\n";
if($prev >= 0){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$prev>";
$dat.="<input type=submit value=\"前のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
if($p >= PAGE_DEF && count($line) > $next){
$dat.="<td><form action=\"".PHP_SELF."\" method=POST>";
$dat.="<input type=hidden name=page value=$next>";
$dat.=" <input type=submit value=\"次のページ\" name=submit>\n";
$dat.="</form></td>\n";
}
$dat.="</td>\n</tr></table>\n";
}
/* フッタ */
function foot(&$dat){
$dat.='
<table align=right><tr>
<td nowrap align=center><form action="'.PHP_SELF.'" method=POST>
<input type=hidden name=mode value=usrdel>
【記事削除】<br>
記事No<input type=text name=no size=3>
削除キー<input type=password name=pwd size=4 maxlength=8>
<input type=submit value="削除">
</form></td>
</tr></table><br clear=all>
<center><P><small><!-- GazouBBS v3.5 -->
- <a href="http://php.s3.to" target=_top>GazouBBS</a> -
</small></center>
</body></html>
';
}
/* 記事書き込み */
function regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name){
global $REQUEST_METHOD,$path;
// フォーム内容をチェック
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); //改行文字の前に<br>を代入する
$com = str_replace("\n", "", $com); //\nを文字列から消す。
// 二重投稿チェック
if($name == $lname && $com == $lcom)
error("二重投稿は禁止です<br><br><a href=$PHP_SELF>リロード</a>");
// ログ行数オーバー
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(file_exists($upfile)){
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
//↑でエラーなら↓に変更
//copy($upfile, $dest);
if(!is_file($dest)) error("アップロードに失敗しました。<br>サーバがサポートしていない可能性があります");
$size = @getimagesize($dest);
if($size[2]=="") error("アップロードに失敗しました。<br>画像ファイル以外は受け付けません");
$W = $size[0];
$H = $size[1];
$ext = substr($upfile_name,-4);
if ($ext == ".php" || $ext == "php3" || $ext == "php4" || $ext == "html") error("アップロードに失敗しました。<br>画像ファイル以外は受け付けません");
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 のアップロードが成功しました<br><br>";
}
$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 "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=".PHP_SELF."?\">";
}
/* テキスト整形 */
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("&amp;", "&", $str);//特殊文字
}
return str_replace(",", "&#44;", $str);//カンマを変換
}
/* ユーザー削除 */
function usrdel($no,$pwd){
global $path;
if($no == "") error("削除Noが入力漏れです");
$line = file(LOGFILE);
$flag = FALSE;
for($i = 0; $i<count($line); $i++){
list($dno,,,,,,,,$pass,$dext,,,$dtim,) = explode(",", $line[$i]);
if($no == $dno) {
if(substr(md5($pwd),2,8) == $pass || ($pwd == '' && $pass == '*')){
$flag = TRUE;
$line[$i] = ""; //パスワードがマッチした行は空に
$delfile = $path.$dtim.$dext; //削除ファイル
break;
}
}
}
if(!$flag) error("該当記事が見つからないかパスワードが間違っています");
// ログ更新
$fp = fopen(LOGFILE, "w");
flock($fp, 2);
fputs($fp, implode('', $line));
fclose($fp);
if(is_file($delfile)) unlink($delfile);//削除
}
/* パス認証 */
function valid($pass){
if($pass && $pass != ADMIN_PASS) error("パスワードが違います");
head($dat);
echo $dat;
echo "[<a href=\"".PHP_SELF."\">掲示板に戻る</a>]\n";
echo "<table width='100%'><tr><th bgcolor=#E08000>\n";
echo "<font color=#FFFFFF>管理モード</font>\n";
echo "</th></tr></table>\n";
echo "<p><form action=\"".PHP_SELF."\" method=POST>\n";
// ログインフォーム
if(!$pass){
echo "<center><input type=radio name=admin value=del checked>記事削除 ";
echo "<input type=radio name=admin value=post>管理人投稿<p>";
echo "<input type=hidden name=mode value=admin>\n";
echo "<input type=password name=pass size=8>";
echo "<input type=submit value=\" 認証 \"></form></center>\n";
die("</body></html>");
}
}
/* 管理者削除 */
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 "<input type=hidden name=mode value=admin>\n";
echo "<input type=hidden name=admin value=del>\n";
echo "<input type=hidden name=pass value=\"$pass\">\n";
echo "<center><P>削除したい記事のチェックボックスにチェックを入れ、削除ボタンを押して下さい。\n";
echo "<P><table border=1 cellspacing=0>\n";
echo "<tr bgcolor=6080f6><th>削除</th><th>記事No</th><th>投稿日</th><th>題名</th>";
echo "<th>投稿者</th><th>コメント</th><th>ホスト名</th><th>添付<br>(Bytes)</th>";
if(CHECK) echo "<th>画像<br>許可</th>";
echo "</tr>\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="<a href=\"mailto:$email\">$name</a>";
$com = str_replace("<br />"," ",$com);
$com = htmlspecialchars($com);
if(strlen($com) > 40) $com = substr($com,0,38) . " ...";
// 画像があるときはリンク
if($ext && is_file($path.$time.$ext)){
$img_flag = TRUE;
$clip = "<a href=\".".IMG_DIR.$time.$ext."\" target=_blank>".$time.$ext."</a>";
$size = filesize($path.$time.$ext);
$all += $size; //合計計算
}else{
$clip = "";
$size = 0;
}
$bg = ($j % 2) ? "d6d6f6" : "f6f6f6";//背景色
echo "<tr bgcolor=$bg><th><input type=checkbox name=del value=\"$no\"></th>";
echo "<th>$no</th><td><small>$now</small></td><td>$sub</td>";
echo "<td><b>$name</b></td><td><small>$com</small></td>";
echo "<td>$host</td><td align=center>$clip<br>($size)</td>\n";
if(CHECK){//画像チェック
if($img_flag && $chk == 1){
echo "<th><font color=red>OK</font></th>";
}elseif($img_flag && $chk != 1) {
echo "<th><input type=checkbox name=chk value=$no></th>";
}else{
echo "<td><br></td>";
}
}
echo "</tr>\n";
}
if(CHECK) $msg = "or許可する";
echo "</table><p><input type=submit value=\"削除する$msg\">";
echo "<input type=reset value=\"リセット\"></form>";
$all = (int)($all / 1024);
echo "【 画像データ合計 : <b>$all</b> KB 】";
die("</center></body></html>");
}
/* オートリンク */
function auto_link($proto){
$proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$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 "<br><br><hr size=1><br><br>
<center><font color=red size=5><b>$mes</b></font></center>
<br><br><hr size=1>";
die("</body></html>");
}
/*-----------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>";
form($post,$res,1);
echo $post;
die("</body></html>");
}
break;
case 'usrdel':
usrdel($no,$pwd);
default:
head($buf);
if(!NIKKI) form($buf,$res);
main($buf,$page);
foot($buf);
echo $buf;
}
?>
View File
Whitespace-only changes.