> http://www.punyu.net/ * *---------------------------------------------------------------------------------- * ORIGINAL SCRIPT : * futaba.php v0.8 lot.031015 (gazou.php v3.0 CUSTOM) * (C)futaba >> http://www.2chan.net/ ((C)ToR >> http://php.s3.to/) * * OEKAKI APPLET : * PaintBBS (test by v2.22_5) * ShiPainter (test by v1.05_3all) * PCHViewer (test by ShiPainter Ver.) * (C)shi-chan >> http://shichan.jp/ * * USE FUNCTION : * HTML template v1.3.2 (C)H.Ayukawa >> http://hoover.ktplan.ne.jp/kaihatsu/php/ * DynamicPalette (C)NoraNeko >> http://wondercatstudio.com/ * repng2jpeg (C)SUGA >> http://sugachan.dip.jp/ *---------------------------------------------------------------------------------- このスクリプトは「レッツPHP!」のgazou.phpを改造した、 「ふたば★ちゃんねる」のfutaba.phpを さらにお絵かきもできるようにして、HTMLテンプレートでデザイン変更できるように改造したものです。 配布条件はレッツPHP!に準じます。改造、再配布は自由にどうぞ。 このスクリプトの改造部分に関する質問は「レッツPHP!」, 「ふたば★ちゃんねる」に問い合わせないでください。 ご質問は、までどうぞ。 */ if(phpversion()>="4.1.0"){ extract($_POST); extract($_GET); extract($_COOKIE); extract($_SERVER); $upfile_name=$_FILES["upfile"]["name"]; $upfile=$_FILES["upfile"]["tmp_name"]; } //設定の読み込み require("config.php"); //HTMLテンプレートクラス require("htmltemplate.inc"); //Template設定ファイル require("template_ini.php"); $path = realpath("./").'/'.IMG_DIR; $temppath = realpath("./").'/'.TEMP_DIR; //サムネイルfunction if((THUMB_SELECT==0 && gd_check()) || THUMB_SELECT==1){ require("thumbnail_gd.php"); }else{ require("thumbnail_re.php"); } //クッキー&メール通知でMB関数 使う:1 使わない:0 define(USE_MB , 1); //バージョン define(POTI_VER , 'v1.21'); define(POTI_VERLOT, 'v1.21 lot.041126'); //GD版が使えるかチェック function gd_check(){ $flag = true; $check = array("ImageCreate","ImageCopyResized","ImageCreateFromJPEG","ImageJPEG","ImageDestroy"); //最低限のGD関数が使えるかチェック if(get_gd_ver() && (ImageTypes() & IMG_JPG)){ foreach ( $check as $cmd ) { if(!function_exists($cmd)){$flag=false; break;} } }else{$flag=false;} return $flag; } //gdのバージョンを調べる function get_gd_ver(){ if(function_exists("gd_info")){ $gdver=gd_info(); $phpinfo=$gdver["GD Version"]; }else{ //php4.3.0未満用 ob_start(); phpinfo(8); $phpinfo=ob_get_contents(); ob_end_clean(); $phpinfo=strip_tags($phpinfo); $phpinfo=stristr($phpinfo,"gd version"); $phpinfo=stristr($phpinfo,"version"); } $end=strpos($phpinfo,"."); $phpinfo=substr($phpinfo,0,$end); $length = strlen($phpinfo)-1; $phpinfo=substr($phpinfo,$length); return $phpinfo; } /* ヘッダ */ function head(&$dat){ $dat['title'] = TITLE; $dat['home'] = HOME; $dat['self'] = PHP_SELF; $dat['self2'] = PHP_SELF2; $dat['paint'] = USE_PAINT ? true : false; $dat['applet'] = APPLET ? true : false; $dat['usepbbs'] = APPLET!=1 ? true : false; $dat['ver'] = POTI_VER; $dat['verlot'] = POTI_VERLOT; $dat['tver'] = TEMPLATE_VER; } /* 投稿フォーム */ function form(&$dat,$resno,$admin="",$tmp=""){ global $addinfo,$stime; $dat['form'] = true; if(USE_PAINT){ $dat['palette'] = ''; $lines = file(PALETTEFILE); foreach ( $lines as $line ) { $line=ereg_replace("[\t\r\n]","",$line); list($pid,$pname,) = explode(",", $line); $dat['palette'] .= '\n"; } $dat['pdefw'] = PDEF_W; $dat['pdefh'] = PDEF_H; $dat['anime'] = USE_ANIME ? true : false; $dat['animechk'] = DEF_ANIME ? ' checked' : ''; $dat['pmaxw'] = PMAX_W; $dat['pmaxh'] = PMAX_H; if(USE_PAINT==2 && !$resno && !$admin){ $dat['paint2'] = true; $dat['form'] = false; } } if($resno){ $dat['resno'] = $resno; }else{ $dat['notres'] = true; } if($admin) $dat['admin'] = ADMIN_PASS; if($stime && DSP_PAINTTIME){ //描画時間 $ptime = ''; if($stime){ $psec = time()-$stime; if($psec >= 86400){ $D = intval($psec/86400); $ptime .= $D.'日'; $psec -= $D*86400; } if($psec >= 3600){ $H = intval($psec/3600); $ptime .= $H.'時間'; $psec -= $H*3600; } if($psec >= 60){ $M = intval($psec/60); $ptime .= $M.'分'; $psec -= $M*60; } if($psec){ $ptime .= $psec.'秒'; } } $dat['ptime'] = $ptime; } $dat['maxbyte'] = MAX_KB * 1024; $dat['usename'] = USE_NAME ? ' *' : ''; $dat['usesub'] = USE_SUB ? ' *' : ''; if(USE_COM||$resno) $dat['usecom'] = ' *'; if(!$resno && !$tmp) $dat['upfile'] = true; $dat['maxkb'] = MAX_KB; $dat['maxw'] = MAX_W; $dat['maxh'] = MAX_H; $dat['addinfo'] = $addinfo; } /* 記事部分 */ function updatelog($resno=0){ global $path; $tree = file(TREEFILE); $find = false; if($resno){ $counttree=count($tree); for($i = 0;$i<$counttree;$i++){ list($artno,)=explode(",",rtrim($tree[$i])); if($artno==$resno){$st=$i;$find=true;break;} //レス先検索 } if(!$find) error("該当記事がみつかりません"); } $line = file(LOGFILE); $countline=count($line); for($i = 0; $i < $countline; $i++){ list($no,) = explode(",", $line[$i]); $lineindex[$no]=$i + 1; //逆変換テーブル作成 } $counttree = count($tree); for($page=0;$page<$counttree;$page+=PAGE_DEF){ $oya = 0; //親記事のメイン添字 head($dat); form($dat,$resno); if(!$resno){ $st = $page; } for($i = $st; $i < $st+PAGE_DEF; $i++){ if($tree[$i]=="") continue; $treeline = explode(",", rtrim($tree[$i])); $disptree = $treeline[0]; $j=$lineindex[$disptree] - 1; //該当記事を探して$jにセット if($line[$j]=="") continue; //$jが範囲外なら次の行 list($no,$now,$name,$email,$sub,$com,$url, $host,$pwd,$ext,$w,$h,$time,$chk,$ptime) = explode(",", rtrim($line[$j])); // URLとメールにリンク if($email) $name = "$name"; if(AUTOLINK) $com = auto_link($com); // '>'色設定 $com = eregi_replace("(^|>)((>|>)[^<]*)", "\\1\\2", $com); // 画像ファイル名 $img = $path.$time.$ext; // 画像系変数セット if($ext && @is_file($img)){ $src = IMG_DIR.$time.$ext; $srcname = $time.$ext; $size = filesize($img); if($w && $h){ //サイズがある時 if(@is_file(THUMB_DIR.$time.'s.jpg')){ $thumb = true; $imgsrc = THUMB_DIR.$time.'s.jpg'; }else{ $imgsrc = $src; } } //描画時間 if(DSP_PAINTTIME) $painttime = $ptime; //動画リンク if(USE_ANIME){ if(@file_exists(PCH_DIR.$time.'.pch')) $pch = $time.$ext; if(@file_exists(PCH_DIR.$time.'.spch')) $pch = $time.$ext.'&shi=1'; } //コンティニュー if(USE_CONTINUE){ if(@file_exists(PCH_DIR.$time.'.pch')||@file_exists(PCH_DIR.$time.'.spch')||$ext=='.jpg') $continue = $no; } } // そろそろ消える。 if($lineindex[$no]-1 >= LOG_MAX*0.95) $limit = true; // ミニフォーム用 if(USE_RESUB) $resub = 'Re: '.$sub; // レス省略 if(!$resno){ $s=count($treeline) - DSP_RES; if(ADMIN_NEWPOST&&!DSP_RES) {$skipres = $s - 1;} elseif($s<1 || !DSP_RES) {$s=1;} elseif($s>1) {$skipres = $s - 1;} }else{ $s=1; $dat['resub'] = $resub; //レス画面用 } // 親記事格納 $dat['oya'][$oya] = compact('src','srcname','size','painttime','pch','continue','thumb','imgsrc','w','h','no','sub','name','now','com','limit','skipres','resub','url'); // 変数クリア unset($src,$srcname,$size,$painttime,$pch,$continue,$thumb,$imgsrc,$w,$h,$no,$sub,$name,$now,$com,$limit,$skipres,$resub,$url); //レス作成 for($k = $s; $k < count($treeline); $k++){ $disptree = $treeline[$k]; $j=$lineindex[$disptree] - 1; if($line[$j]=="") continue; list($no,$now,$name,$email,$sub,$com,$url, $host,$pwd,$ext,$w,$h,$time,$chk) = explode(",", $line[$j]); // URLとメールにリンク if($email) $name = "$name"; if(AUTOLINK) $com = auto_link($com); // '>'色設定 $com = eregi_replace("(^|>)((>|>)[^<]*)", "\\1\\2", $com); // レス記事一時格納 $rres[$oya][] = compact('no','sub','name','now','com','url'); } // レス記事一括格納 $dat['oya'][$oya]['res'] = $rres[$oya]; unset($rres); //クリア clearstatcache(); //ファイルのstatをクリア $oya++; if($resno){break;} //res時はtree1行だけ } if(!$resno){ //res時は表示しない $prev = $st - PAGE_DEF; $next = $st + PAGE_DEF; // 改ページ処理 if($prev >= 0){ if($prev==0){ $dat['prev'] = PHP_SELF2; }else{ $dat['prev'] = $prev/PAGE_DEF.PHP_EXT; } } $paging = ""; for($i = 0; $i < count($tree) ; $i+=PAGE_DEF){ if($st==$i){ $pformat = str_replace("", ''.($i/PAGE_DEF).'', PAGING); }else{ if($i==0){ $pformat = str_replace("", "0", PAGING); }else{ $pformat = str_replace("", "".($i/PAGE_DEF)."", PAGING); } } $paging.=$pformat; } $dat['paging'] = $paging; if($oya >= PAGE_DEF && count($tree) > $next){ $dat['next'] = $next/PAGE_DEF.PHP_EXT; } } if($resno){HtmlTemplate::t_include(RESFILE,$dat);break;} $dat['resform'] = RES_FORM ? true : false; $buf = HtmlTemplate::t_buffer(MAINFILE,$dat); if($page==0){$logfilename=PHP_SELF2;} else{$logfilename=$page/PAGE_DEF.PHP_EXT;} $fp = fopen($logfilename, "w"); set_file_buffer($fp, 0); flock($fp, 2); //* rewind($fp); fputs($fp, $buf); fclose($fp); @chmod($logfilename,0666); unset($dat); //クリア } if(!$resno&&@is_file(($page/PAGE_DEF+1).PHP_EXT)){unlink(($page/PAGE_DEF+1).PHP_EXT);} } /* オートリンク */ function auto_link($proto){ $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","\\1\\2",$proto); return $proto; } /* 日付 */ function now_date($time){ $youbi = array('日','月','火','水','木','金','土'); $yd = $youbi[gmdate("w", $time+9*60*60)] ; $now = gmdate(DATE_FORMAT, $time+9*60*60); $now = str_replace("<1>", $yd, $now); //漢字の曜日セット1 $now = str_replace("<2>", $yd.'曜', $now); //漢字の曜日セット2 return $now; } /* エラー画面 */ function error($mes,$dest=''){ if(@is_file($dest)) unlink($dest); $dat['err_mode'] = true; head($dat); $dat['mes'] = $mes; HtmlTemplate::t_include(OTHERFILE,$dat); exit; } function proxy_connect($port) { $fp = fsockopen (getenv("REMOTE_ADDR"), $port,$a,$b,2); if(!$fp){return 0;}else{return 1;} } /* 記事書き込み */ function regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name,$resto,$pictmp,$picfile){ global $path,$badstring,$badfile,$badip,$pwdc,$textonly; global $REQUEST_METHOD,$temppath,$ptime; // 時間 $time = time(); $tim = $time.substr(microtime(),2,3); // お絵かき絵アップロード処理 if($pictmp==2){ if(!$picfile) error("絵が選択されてません"); $upfile = $temppath.$picfile; $upfile_name = $picfile; $picfile = str_replace(strrchr($picfile,"."),"",$picfile); //拡張子除去 $tim = KASIRA.$tim; } if($upfile&&@file_exists($upfile)){ $dest = $path.$tim.'.tmp'; if($pictmp==2){ copy($upfile, $dest); }else{ move_uploaded_file($upfile, $dest); //↑でエラーなら↓に変更 //copy($upfile, $dest); } $upfile_name = CleanStr($upfile_name); if(!@file_exists($dest)) error("アップロードに失敗しました
サーバがサポートしていない可能性があります",$dest); $size = getimagesize($dest); if(!is_array($size)) error("アップロードに失敗しました
画像ファイル以外は受け付けません",$dest); $chk = md5_of_file($dest); foreach($badfile as $value){if(ereg("^$value",$chk)){ error("アップロードに失敗しました
同じ画像がありました",$dest); //拒絶画像 }} @chmod($dest,0666); $W = $size[0]; $H = $size[1]; switch ($size[2]) { case 1 : $ext=".gif";break; case 2 : $ext=".jpg";break; case 3 : $ext=".png";break; default : error("アップロードに失敗しました
画像ファイル以外は受け付けません",$dest); } // 画像表示縮小 if($W > MAX_W || $H > MAX_H){ $W2 = MAX_W / $W; $H2 = MAX_H / $H; ($W2 < $H2) ? $key = $W2 : $key = $H2; $W = ceil($W * $key); $H = ceil($H * $key); } $mes = "画像 $upfile_name のアップロードが成功しました

"; } foreach($badstring as $value){if(ereg($value,$com)||ereg($value,$sub)||ereg($value,$name)||ereg($value,$email)){error("拒絶されました(str)",$dest);};} if($REQUEST_METHOD != "POST") error("不正な投稿をしないで下さい(post)",$dest); // フォーム内容をチェック if(!$name||ereg("^[ | |]*$",$name)) $name=""; if(!$com||ereg("^[ | |\t]*$",$com)) $com=""; if(!$sub||ereg("^[ | |]*$",$sub)) $sub=""; if(!$url||ereg("^[ | |]*$",$url)) $url=""; if(!$resto&&!$textonly&&!@is_file($dest)) error("画像がありません",$dest); if(!$com&&!@is_file($dest)) error("何か書いて下さい",$dest); if(USE_NAME&&!$name) error("名前がありません",$dest); if(USE_COM&&!$com) error("何か書いて下さい",$dest); if(USE_SUB&&!$sub) error("題名がありません",$dest); //$name=ereg_replace("管理","\"管理\"",$name); //$name=ereg_replace("削除","\"削除\"",$name); if(strlen($com) > MAX_COM) error("本文が長すぎますっ!",$dest); if(strlen($name) > MAX_NAME) error("名前が長すぎますっ!",$dest); if(strlen($email) > MAX_EMAIL) error("メールアドレスが長すぎますっ!",$dest); if(strlen($sub) > MAX_SUB) error("題名が長すぎますっ!",$dest); if(strlen($resto) > 10) error("異常です",$dest); //ホスト取得 $host = gethostbyaddr(getenv("REMOTE_ADDR")); foreach($badip as $value){ //拒絶host if(eregi("$value$",$host)){ error("拒絶されました(host)",$dest); }} if(eregi("^mail",$host) || eregi("^ns",$host) || eregi("^dns",$host) || eregi("^ftp",$host) || eregi("^prox",$host) || eregi("^pc",$host) || eregi("^[^\.]\.[^\.]$",$host)){ $pxck = "on"; } if(eregi("ne\\.jp$",$host)|| eregi("ad\\.jp$",$host)|| eregi("bbtec\\.net$",$host)|| eregi("aol\\.com$",$host)|| eregi("uu\\.net$",$host)|| eregi("asahi-net\\.or\\.jp$",$host)|| eregi("rim\\.or\\.jp$",$host) ){$pxck = "off";} else{$pxck = "on";} if($pxck=="on" && PROXY_CHECK){ if(proxy_connect('80') == 1){ error("ERROR! 公開PROXY規制中!!(80)",$dest); } elseif(proxy_connect('8080') == 1){ error("ERROR! 公開PROXY規制中!!(8080)",$dest); } } // No.とパスと時間とURLフォーマット srand((double)microtime()*1000000); if($pwd==""){ if($pwdc==""){ $pwd=rand();$pwd=substr($pwd,0,8); }else{ $pwd=$pwdc; } } $c_pass = $pwd; $pass = ($pwd) ? substr(md5($pwd),2,8) : "*"; $now = now_date($time);//日付取得 if(DISP_ID){ if($email&&DISP_ID==1){ $now .= " ID:???"; }else{ $now.=" ID:".substr(crypt(md5(getenv("REMOTE_ADDR").ID_SEED.gmdate("Ymd", $time+9*60*60)),'id'),-8); } } //テキスト整形 $email= CleanStr($email); $email=ereg_replace("[\r\n]","",$email); $sub = CleanStr($sub); $sub =ereg_replace("[\r\n]","",$sub); $resto= CleanStr($resto); $resto=ereg_replace("[\r\n]","",$resto); $url = CleanStr($url); $url =ereg_replace("[\r\n]","",$url); $url = str_replace(" ", "", $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); if(!BR_CHECK || substr_count($com,"\n")を代入する } $com = str_replace("\n", "", $com); //\nを文字列から消す。 $name=ereg_replace("◆","◇",$name); $name=ereg_replace("[\r\n]","",$name); $names=$name; $name = CleanStr($name); if(ereg("(#|#)(.*)",$names,$regs)){ $cap = $regs[2]; $cap=strtr($cap,"&", "&"); $cap=strtr($cap,",", ","); $name=ereg_replace("(#|#)(.*)","",$name); $salt=substr($cap."H.",1,2); $salt=ereg_replace("[^\.-z]",".",$salt); $salt=strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef"); $name.="◆".substr(crypt($cap,$salt),-10).""; } if(!$name) $name=DEF_NAME; if(!$com) $com=DEF_COM; if(!$sub) $sub=DEF_SUB; //ログ読み込み $fp=fopen(LOGFILE,"r+"); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error load log",$dest);} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){ if($line[$i]!=""){ list($artno,)=explode(",", rtrim($line[$i])); //逆変換テーブル作成 $lineindex[$artno]=$i+1; $line[$i].="\n"; } } // 二重投稿チェック for($i=0;$i<20;$i++){ list($lastno,,$lname,,,$lcom,,$lhost,$lpwd,,,,$ltime,) = explode(",", $line[$i]); if(strlen($ltime)>10){$ltime=substr($ltime,0,-3);} if($host==$lhost||substr(md5($pwd),2,8)==$lpwd||substr(md5($pwdc),2,8)==$lpwd){$pchk=1;}else{$pchk=0;} if(RENZOKU && $pchk && $time - $ltime < RENZOKU) error("連続投稿はもうしばらく時間を置いてからお願い致します",$dest); if(RENZOKU && $pchk && $time - $ltime < RENZOKU2 && $upfile_name) error("画像連続投稿はもうしばらく時間を置いてからお願い致します",$dest); if(RENZOKU && $pchk && $com == $lcom && !$upfile_name) error("このコメントで一度投稿しています。別のコメントでお願い致します",$dest); } // ログ行数オーバー if(count($line) >= LOG_MAX){ for($d = count($line)-1; $d >= LOG_MAX-1; $d--){ list($dno,,,,,,,,,$dext,,,$dtime,) = explode(",", $line[$d]); if(@is_file($path.$dtime.$dext)) unlink($path.$dtime.$dext); if(@is_file(THUMB_DIR.$dtime.'s.jpg')) unlink(THUMB_DIR.$dtime.'s.jpg'); if(@is_file(PCH_DIR.$dtime.'.pch')) unlink(PCH_DIR.$dtime.'.pch'); if(@is_file(PCH_DIR.$dtime.'.spch')) unlink(PCH_DIR.$dtime.'.spch'); $line[$d] = ""; treedel($dno); } } // アップロード処理 if($dest&&@file_exists($dest)){ for($i=0;$i<200;$i++){ //画像重複チェック list(,,,,,,,,,$extp,,,$timep,$chkp,) = explode(",", $line[$i]); if($chkp==$chk&&@file_exists($path.$timep.$extp)){ error("アップロードに失敗しました
同じ画像があります",$dest); }} } list($lastno,) = explode(",", $line[0]); $no = $lastno + 1; $newline = "$no,$now,$name,$email,$sub,$com,$url,$host,$pass,$ext,$W,$H,$tim,$chk,$ptime\n"; $newline.= implode('', $line); ftruncate($fp,0); set_file_buffer($fp, 0); rewind($fp); fputs($fp, $newline); //ツリー更新 $find = false; $newline = ''; $tp=fopen(TREEFILE,"r+"); set_file_buffer($tp, 0); flock($tp, 2); //* rewind($tp); $buf=fread($tp,1000000); if($buf==''){error("error tree update",$dest);} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){ if($line[$i]!=""){ $line[$i].="\n"; $j=explode(",", rtrim($line[$i])); if($lineindex[$j[0]]==0){ $line[$i]=''; } } } if($resto){ for($i = 0; $i < $countline; $i++){ $rtno = explode(",", rtrim($line[$i])); if($rtno[0]==$resto){ $find = TRUE; $line[$i]=rtrim($line[$i]).','.$no."\n"; $j=explode(",", rtrim($line[$i])); if(!(stristr($email,'sage') || (count($j)>MAX_RES))){ $newline=$line[$i]; $line[$i]=''; } break; } } } if(!$find){if(!$resto){$newline="$no\n";}else{error("スレッドがありません",$dest);}} $newline.=implode('', $line); ftruncate($tp,0); set_file_buffer($tp, 0); rewind($tp); fputs($tp, $newline); fclose($tp); fclose($fp); //-- クッキー保存 -- //漢字を含まない項目はこちらの形式で追加 setcookie ("pwdc", $c_pass,time()+SAVE_COOKIE*24*3600); //クッキー項目:"クッキー名<>クッキー値" ※漢字を含む項目はこちらに追加 $cooks = array("namec<>$names","emailc<>$email","urlc<>$url"); foreach ( $cooks as $cook ) { list($c_name,$c_cook) = explode('<>',$cook); if(function_exists("mb_convert_encoding")&&function_exists("mb_language")&&USE_MB){ mb_language("Japanese"); $c_cookie = mb_convert_encoding($c_cook, "UTF-8", "auto"); }elseif(@file_exists("jcode.phps")){ require_once('jcode.phps'); global $table_jis_utf8; include_once('code_table.jis2ucs'); $c_cookie = JcodeConvert($c_cook, 0, 4);//UTF-8 }elseif(function_exists("iconv")){ $c_cookie = iconv("shift_jis", "UTF-8", $c_cook);//SJIS to UTF-8 }else{ $c_cookie = $c_cook; } setcookie ($c_name, $c_cookie,time()+SAVE_COOKIE*24*3600); } if($dest&&@file_exists($dest)){ rename($dest,$path.$tim.$ext); if(USE_THUMB){thumb($path,$tim,$ext);} //ワークファイル削除 if(@file_exists($upfile)) unlink($upfile); if(@file_exists($temppath.$picfile.".dat")) unlink($temppath.$picfile.".dat"); //PCHファイルアップロード $pchtemp = $temppath.$picfile.'.pch'; if(@file_exists($pchtemp)){ copy($pchtemp, PCH_DIR.$tim.'.pch'); if(@file_exists(PCH_DIR.$tim.'.pch')){ @chmod(PCH_DIR.$tim.'.pch',0666); unlink($pchtemp); } } //SPCHファイルアップロード $pchtemp = $temppath.$picfile.'.spch'; if(@file_exists($pchtemp)){ copy($pchtemp, PCH_DIR.$tim.'.spch'); if(@file_exists(PCH_DIR.$tim.'.spch')){ @chmod(PCH_DIR.$tim.'.spch',0666); unlink($pchtemp); } } } updatelog(); //メール通知 if(@file_exists("noticemail.inc") //メール通知クラスがある場合 && !(NOTICE_NOADMIN && $pwd == ADMIN_PASS)){//管理者の投稿の場合メール出さない require_once('noticemail.inc'); $data[to] = TO_MAIL; $data[name] = $name; $data[email] = $email; $data[option][] = 'URL,'.$url; $data[option][] = '記事題名,'.$sub; if($resto){ $data[subject] = '['.TITLE.'] No.'.$resto.'へのレスがありました'; $data[option][] = "\n記事URL,".ROOT_URL.PHP_SELF.'?res='.$resto; }else{ $data[subject] = '['.TITLE.'] 新規投稿がありました'; if(@file_exists($path.$tim.$ext)) $data[option][] = '投稿画像,'.ROOT_URL.IMG_DIR.$tim.$ext; if(@file_exists(THUMB_DIR.$tim.'s.jpg')) $data[option][] = 'サムネイル画像,'.ROOT_URL.THUMB_DIR.$tim.'s.jpg'; if(@file_exists(PCH_DIR.$tim.'.pch')) $data[option][] = 'アニメファイル,'.ROOT_URL.PCH_DIR.$tim.'.pch'; if(@file_exists(PCH_DIR.$tim.'.spch')) $data[option][] = 'アニメファイル,'.ROOT_URL.PCH_DIR.$tim.'.spch'; $data[option][] = "\n記事URL,".ROOT_URL.PHP_SELF.'?res='.$no; } if(SEND_COM) $data[comment] = eregi_replace("","\n", $com); noticemail::send($data,USE_MB); } echo " "; echo "
$mes 画面を切り替えます "; } //ファイルmd5計算 php4.2.0未満用 function md5_of_file($inFile) { if (@file_exists($inFile)){ if(function_exists('md5_file')){ return md5_file($inFile); }else{ $fd = fopen($inFile, 'r'); $fileContents = fread($fd, filesize($inFile)); fclose ($fd); return md5($fileContents); } }else{ return false; }} //ツリー削除 function treedel($delno){ $fp=fopen(TREEFILE,"r+"); set_file_buffer($fp, 0); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error tree del");} $line = explode("\n",$buf); $countline=count($line); $find=false; for($i = 0; $i < $countline; $i++){if($line[$i]!=""){$line[$i].="\n";};} for($i = 0; $i < $countline; $i++){ $treeline = explode(",", rtrim($line[$i])); $counttreeline=count($treeline); for($j = 0; $j < $counttreeline; $j++){ if($treeline[$j] == $delno){ if($j==0){//スレ削除 if($countline<3){//スレが1つしかない場合、エラー防止の為に削除不可 fclose($fp); error("スレッドが最後の1つなので削除できません"); }else{$line[$i]='';} }else{//レス削除 $treeline[$j]=''; $line[$i]=implode(',', $treeline); $line[$i]=ereg_replace(",,",",",$line[$i]); $line[$i]=ereg_replace(",$","",$line[$i]); $line[$i].="\n"; } $find=true; break 2; } } } if($find){//ツリー更新 ftruncate($fp,0); set_file_buffer($fp, 0); rewind($fp); fputs($fp, implode('', $line)); } fclose($fp); } /* テキスト整形 */ function CleanStr($str){ global $admin; $str = trim($str);//先頭と末尾の空白除去 if (get_magic_quotes_gpc()) {//¥を削除 $str = stripslashes($str); } if($admin!=ADMIN_PASS){//管理者はタグ可能 $str = htmlspecialchars($str);//タグっ禁止 $str = str_replace("&", "&", $str);//特殊文字 } return str_replace(",", ",", $str);//カンマを変換 } /* ユーザー削除 */ function usrdel($del,$pwd){ global $path,$pwdc,$onlyimgdel; $host = gethostbyaddr(getenv("REMOTE_ADDR")); if(is_array($del)){ sort($del); reset($del); if($pwd==""&&$pwdc!="") $pwd=$pwdc; $fp=fopen(LOGFILE,"r+"); set_file_buffer($fp, 0); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error user del");} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){if($line[$i]!=""){$line[$i].="\n";};} $flag = false; $find = false; for($i = 0; $i 10) $name = substr($name,0,9)."."; if(strlen($sub) > 10) $sub = substr($sub,0,9)."."; if($email) $name="$name"; $com = eregi_replace(""," ",$com); //$com = str_replace("
"," ",$com); $com = htmlspecialchars($com); if(strlen($com) > 20) $com = substr($com,0,18) . "."; // 画像があるときはリンク if($ext && @is_file($path.$time.$ext)){ $img_flag = TRUE; $clip = "".$time.$ext."
"; $size = filesize($path.$time.$ext); $all += $size; //合計計算 $chk= substr($chk,0,10); }else{ $clip = ""; $size = 0; $chk= ""; } $bg = ($j % 2) ? ADMIN_DELGUSU : ADMIN_DELKISU;//背景色 $dat['del'][$j] = compact('bg','no','now','sub','name','com','host','clip','size','chk'); } $dat['all'] = (int)($all / 1024); HtmlTemplate::t_include(OTHERFILE,$dat); exit; } function init(){ $chkfile=array(LOGFILE,TREEFILE); if(!is_writable(realpath("./")))error("カレントディレクトリに書けません
"); foreach($chkfile as $value){ if([email protected]_exists(realpath($value))){ $fp = fopen($value, "w"); set_file_buffer($fp, 0); $now = now_date(time());//日付取得 if(DISP_ID) $now .= " ID:???"; $testmes="1,".$now.",".DEF_NAME.",,".DEF_SUB.",".DEF_COM.",,\n"; if($value==LOGFILE)fputs($fp,$testmes); if($value==TREEFILE)fputs($fp,"1\n"); fclose($fp); if(@file_exists(realpath($value)))@chmod($value,0666); } if(!is_writable(realpath($value)))$err.=$value."を書けません
"; if(!is_readable(realpath($value)))$err.=$value."を読めません
"; } @mkdir(IMG_DIR,0777);@chmod(IMG_DIR,0777); if(!is_dir(realpath(IMG_DIR)))$err.=IMG_DIR."がありません
"; if(!is_writable(realpath(IMG_DIR)))$err.=IMG_DIR."を書けません
"; if(!is_readable(realpath(IMG_DIR)))$err.=IMG_DIR."を読めません
"; if(USE_THUMB){ @mkdir(THUMB_DIR,0777);@chmod(THUMB_DIR,0777); if(!is_dir(realpath(THUMB_DIR)))$err.=THUMB_DIR."がありません
"; if(!is_writable(realpath(THUMB_DIR)))$err.=THUMB_DIR."を書けません
"; if(!is_readable(realpath(THUMB_DIR)))$err.=THUMB_DIR."を読めません
"; } if(USE_PAINT){ @mkdir(TEMP_DIR,0777);@chmod(TEMP_DIR,0777); if(!is_dir(realpath(TEMP_DIR)))$err.=TEMP_DIR."がありません
"; if(!is_writable(realpath(TEMP_DIR)))$err.=TEMP_DIR."を書けません
"; if(!is_readable(realpath(TEMP_DIR)))$err.=TEMP_DIR."を読めません
"; } if($err)error($err); if([email protected]_exists(realpath(PHP_SELF2)))updatelog(); } /* お絵描き画面 */ function paintform($picw,$pich,$palette,$anime,$pch=""){ global $admin,$shi,$ctype,$type,$no,$pwd; if($picw < 100) $picw = 100; if($pich < 100) $pich = 100; if($picw > PMAX_W) $picw = PMAX_W; if($pich > PMAX_H) $pich = PMAX_H; $w = $picw + 150; $h = $pich + 170; if($w < 400){$w = 400;} if($h < 420){$h = 420;} if($w < 500 && $shi){$w = 500;} if($h < 500 && $shi==2){$h = 500;} $dat['paint_mode'] = true; head($dat); if($shi==1){ $dat['normal'] = true; } elseif($shi==2){ $dat['pro'] = true; } else{ $dat['paintbbs'] = true; } $dat['palettes'][0] = 'Palettes[0] = "#000000\n#FFFFFF\n#B47575\n#888888\n#FA9696\n#C096C0\n#FFB6FF\n#8080FF\n#25C7C9\n#E7E58D\n#E7962D\n#99CB7B\n#FCECE2\n#F9DDCF";'."\n"; $pal=array(); $DynP=array(); $p_cnt=1; $lines = file(PALETTEFILE); foreach ( $lines as $line ) { $line=ereg_replace("[\t\r\n]","",$line); list($pid,$pname,$pal[0],$pal[2],$pal[4],$pal[6],$pal[8],$pal[10],$pal[1],$pal[3],$pal[5],$pal[7],$pal[9],$pal[11],$pal[12],$pal[13]) = explode(",", $line); $DynP[]=$pname; $palettes = 'Palettes['.$p_cnt.'] = "#'.$pal[0]; ksort($pal); array_shift($pal); foreach ( $pal as $p ) { $palettes.='\n#'.$p; } $palettes.='";'."\n"; $dat['palettes'][$p_cnt] = $palettes; $p_cnt++; if($pid==$palette){ $C_Palette = explode(",", $line); array_shift($C_Palette); array_shift($C_Palette); } } $dat['w'] = $w; $dat['h'] = $h; $dat['picw'] = $picw; $dat['pich'] = $pich; $stime = time(); $dat['stime'] = $stime; if($pwd) $pwd = substr(md5($pwd),2,8); $dat['mode'] = ($type=='rep') ? 'picrep&no='.$no.'&pwd='.$pwd : 'piccom' ; if($anime) $dat['anime'] = true; if($ctype=='pch'){ if(@file_exists(PCH_DIR.$pch.'.pch')) $dat['pchfile'] = './'.PCH_DIR.$pch.'.pch'; if(@file_exists(PCH_DIR.$pch.'.spch')) $dat['pchfile'] = './'.PCH_DIR.$pch.'.spch'; } if($ctype=='jpg'){ $dat['anime'] = false; $dat['jpgfile'] = './'.PCH_DIR.$pch.'.jpg'; } if(ADMIN_NEWPOST&&$admin==ADMIN_PASS) $dat['admin'] = 'picpost'; if(isset($C_Palette)){ for ($n = 1;$n < 7;++$n) $cpal[$n*2-1] = $C_Palette[$n-1]; for ($n = 7;$n < 13;++$n) $cpal[$n-(13-$n)+1] = $C_Palette[$n-1]; for ($n = 13;$n < 15;++$n) $cpal[$n] = $C_Palette[$n-1]; ksort($cpal); $no = 1; foreach ($cpal as $pal){ $dat['cpal'][] = compact('no','pal'); $no++; } } $dat['palsize'] = count($DynP) + 1; foreach ($DynP as $p){ $dat['dynp'][] = $p; } $buf = HtmlTemplate::t_buffer(PAINTFILE,$dat); list($buf1,$buf2) = explode('', $buf); echo $buf1; if(@file_exists("siihelp.php")) include("siihelp.php"); echo $buf2; } /* お絵かきコメント */ function paintcom(){ global $admin; $userip = getenv("HTTP_CLINT_IP"); if(!$userip) $userip = getenv("HTTP_X_FORWARDED_FOR"); if(!$userip) $userip = getenv("REMOTE_ADDR"); $handle = @opendir(TEMP_DIR); while ($file = readdir($handle)) { if(!is_dir($file) && preg_match("/\.(dat)$/i",$file)) { $fp = fopen(TEMP_DIR.$file, "r"); $userdata = fread($fp, 1024); fclose($fp); list($uip,$uhost,$uagent,$imgext) = explode("\t", rtrim($userdata)); $file_name = eregi_replace("\.(dat)$","",$file); if(@file_exists(TEMP_DIR.$file_name.$imgext) && (!IP_CHECK || $uip == $userip)) $tmp[] = $file_name.$imgext; } } closedir($handle); $dat['post_mode'] = true; $dat['regist'] = true; head($dat); if(IP_CHECK) $dat['ipcheck'] = true; if(!$tmp){ $dat['notmp'] = true; $dat['pictmp'] = 1; }else{ $dat['pictmp'] = 2; sort($tmp); reset($tmp); foreach($tmp as $tmpfile){ $src = TEMP_DIR.$tmpfile; $srcname = $tmpfile; $date = gmdate("Y/m/d H:i", filemtime($src)+9*60*60); $dat['tmp'][] = compact('src','srcname','date'); } } if(ADMIN_NEWPOST&&$admin=='picpost') $dat['admin'] = $admin; form($dat,'','',$tmp); HtmlTemplate::t_include(OTHERFILE,$dat); } /* 動画表示 */ function openpch($pch,$sp=""){ global $shi; $picfile = IMG_DIR.$pch; $pch = str_replace( strrchr($pch,"."), "", $pch); //拡張子除去 if($shi==1){ $dat['normal'] = true; $pchfile = PCH_DIR.$pch.'.spch'; }else{ $dat['paintbbs'] = true; $pchfile = PCH_DIR.$pch.'.pch'; } $datasize = filesize($pchfile); $size = getimagesize($picfile); if(!$sp) $sp = PCH_SPEED; $picw = $size[0]; $pich = $size[1]; $w = $picw; $h = $pich + 26; if($w < 200){$w = 200;} if($h < 226){$h = 226;} $dat['pch_mode'] = true; head($dat); $dat['w'] = $w; $dat['h'] = $h; $dat['picw'] = $picw; $dat['pich'] = $pich; $dat['pchfile'] = './'.$pchfile; $dat['speed'] = $sp; $dat['datasize'] = $datasize; HtmlTemplate::t_include(PAINTFILE,$dat); } /* テンポラリ内のゴミ除去 */ function deltemp(){ $handle = @opendir(TEMP_DIR); while ($file = readdir($handle)) { if(!is_dir($file)) { $lapse = time() - filemtime(TEMP_DIR.$file); if($lapse > (TEMP_LIMIT*24*3600)){ unlink(TEMP_DIR.$file); } } } closedir($handle); } /* コンティニュー前画面 */ function incontinue($no){ global $addinfo; $lines = file(LOGFILE); $countline=count($line); $flag = FALSE; foreach($lines as $line){ list($cno,,,,,,,,,$cext,$picw,$pich,$ctim,) = explode(",", $line); if($cno == $no){ $flag = TRUE; break; } } if(!$flag) error("該当記事が見つかりません"); $dat['continue_mode'] = true; head($dat); if(CONTINUE_PASS) $dat['passflag'] = true; $dat['picfile'] = IMG_DIR.$ctim.$cext; $size = getimagesize($dat['picfile']); $dat['picw'] = $size[0]; $dat['pich'] = $size[1]; $dat['no'] = $no; $dat['pch'] = $ctim; if(@file_exists(PCH_DIR.$ctim.'.pch')){ $dat['applet'] = false; $dat['ctype_pch'] = true; }elseif(@file_exists(PCH_DIR.$ctim.'.spch')){ $dat['applet'] = true; $dat['usepbbs'] = false; $dat['ctype_pch'] = true; }elseif(@file_exists(IMG_DIR.$ctim.'.jpg')){ $dat['applet'] = true; $dat['usepbbs'] = true; } if(@file_exists(IMG_DIR.$ctim.'.jpg')) $dat['ctype_jpg'] = true; $lines = file(PALETTEFILE); foreach ( $lines as $line ) { $line=ereg_replace("[\t\r\n]","",$line); list($pid,$pname,) = explode(",", $line); $dat['palette'] .= '\n"; } $dat['addinfo'] = $addinfo; HtmlTemplate::t_include(PAINTFILE,$dat); } /* コンティニュー認証 */ function usrchk($no,$pwd){ $lines = file(LOGFILE); $countline=count($line); $flag = FALSE; foreach($lines as $line){ list($cno,,,,,,,,$cpwd,) = explode(",", $line); if($cno == $no && substr(md5($pwd),2,8) == $cpwd){ $flag = TRUE; break; } } if(!$flag) error("該当記事が見つからないかパスワードが間違っています"); } /* 編集画面 */ function editform($del,$pwd){ global $pwdc,$addinfo; $host = gethostbyaddr(getenv("REMOTE_ADDR")); if(is_array($del)){ sort($del); reset($del); if($pwd==""&&$pwdc!="") $pwd=$pwdc; $fp=fopen(LOGFILE,"r"); flock($fp, 2); $buf=fread($fp,1000000); fclose($fp); if($buf==''){error("error load log");} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){if($line[$i]!=""){$line[$i].="\n";};} $flag = FALSE; for($i = 0; $i","\n",$com); //
または
を改行へ戻す $dat['com'] = $com; $dat['url'] = $url; $dat['pwd'] = $pwd; HtmlTemplate::t_include(OTHERFILE,$dat); }else{ error("記事Noが未入力です"); } } /* 記事上書き */ function rewrite($no,$name,$email,$sub,$com,$url,$pwd,$admin){ global $badstring,$badip; global $REQUEST_METHOD; // 時間 $time = time(); foreach($badstring as $value){if(ereg($value,$com)||ereg($value,$sub)||ereg($value,$name)||ereg($value,$email)){error("拒絶されました(str)",$dest);};} if($REQUEST_METHOD != "POST") error("不正な投稿をしないで下さい(post)"); // フォーム内容をチェック if(!$name||ereg("^[ | |]*$",$name)) $name=""; if(!$com||ereg("^[ | |\t]*$",$com)) $com=""; if(!$sub||ereg("^[ | |]*$",$sub)) $sub=""; if(!$url||ereg("^[ | |]*$",$url)) $url=""; //$name=ereg_replace("管理","\"管理\"",$name); //$name=ereg_replace("削除","\"削除\"",$name); if(strlen($com) > MAX_COM) error("本文が長すぎますっ!"); if(strlen($name) > MAX_NAME) error("名前が長すぎますっ!"); if(strlen($email) > MAX_EMAIL) error("メールアドレスが長すぎますっ!"); if(strlen($sub) > MAX_SUB) error("題名が長すぎますっ!"); //ホスト取得 $host = gethostbyaddr(getenv("REMOTE_ADDR")); foreach($badip as $value){ //拒絶host if(eregi("$value$",$host)){ error("拒絶されました(host)"); }} if(eregi("^mail",$host) || eregi("^ns",$host) || eregi("^dns",$host) || eregi("^ftp",$host) || eregi("^prox",$host) || eregi("^pc",$host) || eregi("^[^\.]\.[^\.]$",$host)){ $pxck = "on"; } if(eregi("ne\\.jp$",$host)|| eregi("ad\\.jp$",$host)|| eregi("bbtec\\.net$",$host)|| eregi("aol\\.com$",$host)|| eregi("uu\\.net$",$host)|| eregi("asahi-net\\.or\\.jp$",$host)|| eregi("rim\\.or\\.jp$",$host) ){$pxck = "off";} else{$pxck = "on";} if($pxck=="on" && PROXY_CHECK){ if(proxy_connect('80') == 1){ error("ERROR! 公開PROXY規制中!!(80)"); } elseif(proxy_connect('8080') == 1){ error("ERROR! 公開PROXY規制中!!(8080)"); } } // パスと時間とURLフォーマット $pass = ($pwd) ? substr(md5($pwd),2,8) : "*"; $now = now_date($time);//日付取得 $now .= UPDATE_MARK; if(DISP_ID){ if($email&&DISP_ID==1){ $now .= " ID:???"; }else{ $now.=" ID:".substr(crypt(md5(getenv("REMOTE_ADDR").ID_SEED.gmdate("Ymd", $time+9*60*60)),'id'),-8); } } //テキスト整形 $email= CleanStr($email); $email=ereg_replace("[\r\n]","",$email); $sub = CleanStr($sub); $sub =ereg_replace("[\r\n]","",$sub); $url = CleanStr($url); $url =ereg_replace("[\r\n]","",$url); $url = str_replace(" ", "", $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); if(!BR_CHECK || substr_count($com,"\n")を代入する } $com = str_replace("\n", "", $com); //\nを文字列から消す。 $name=ereg_replace("◆","◇",$name); $name=ereg_replace("[\r\n]","",$name); $names=$name; $name = CleanStr($name); if(ereg("(#|#)(.*)",$names,$regs)){ $cap = $regs[2]; $cap=strtr($cap,"&", "&"); $cap=strtr($cap,",", ","); $name=ereg_replace("(#|#)(.*)","",$name); $salt=substr($cap."H.",1,2); $salt=ereg_replace("[^\.-z]",".",$salt); $salt=strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef"); $name.="
◆".substr(crypt($cap,$salt),-10).""; } //ログ読み込み $fp=fopen(LOGFILE,"r+"); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error load log");} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){if($line[$i]!=""){$line[$i].="\n";};} // 記事上書き $flag = FALSE; for($i = 0; $i "; echo "
$mes 画面を切り替えます "; } /* 画像差し換え */ function replace($no,$pwd,$stime){ global $path,$temppath,$badip,$badfile; //ホスト取得 $host = gethostbyaddr(getenv("REMOTE_ADDR")); foreach($badip as $value){ //拒絶host if(eregi("$value$",$host)){ error("拒絶されました(host)"); }} if(eregi("^mail",$host) || eregi("^ns",$host) || eregi("^dns",$host) || eregi("^ftp",$host) || eregi("^prox",$host) || eregi("^pc",$host) || eregi("^[^\.]\.[^\.]$",$host)){ $pxck = "on"; } if(eregi("ne\\.jp$",$host)|| eregi("ad\\.jp$",$host)|| eregi("bbtec\\.net$",$host)|| eregi("aol\\.com$",$host)|| eregi("uu\\.net$",$host)|| eregi("asahi-net\\.or\\.jp$",$host)|| eregi("rim\\.or\\.jp$",$host) ){$pxck = "off";} else{$pxck = "on";} if($pxck=="on" && PROXY_CHECK){ if(proxy_connect('80') == 1){ error("ERROR! 公開PROXY規制中!!(80)"); } elseif(proxy_connect('8080') == 1){ error("ERROR! 公開PROXY規制中!!(8080)"); } } //テンポラリ捜査 $userip = getenv("HTTP_CLINT_IP"); if(!$userip) $userip = getenv("HTTP_X_FORWARDED_FOR"); if(!$userip) $userip = getenv("REMOTE_ADDR"); $find=false; $handle = @opendir(TEMP_DIR); while ($file = readdir($handle)) { if(!is_dir($file) && preg_match("/\.(dat)$/i",$file)) { $fp = fopen(TEMP_DIR.$file, "r"); $userdata = fread($fp, 1024); fclose($fp); list($uip,$uhost,$uagent,$imgext) = explode("\t", rtrim($userdata)); $file_name = eregi_replace("\.(dat)$","",$file); if(@file_exists(TEMP_DIR.$file_name.$imgext) && (!IP_CHECK || $uip == $userip)){$find=true;break;} } } closedir($handle); if(!$find){ echo "画像が見当たりません "; echo '
画像が見当たりません。数秒待ってリロードしてください。

リロードしてもこの画面がでるなら投稿に失敗している可能性があります。
※諦める前に「アップロード途中の画像」を見ましょう。もしかしたら画像が見つかるかもしれません。 '; exit; } // 時間 $time = time(); $tim = KASIRA.$time.substr(microtime(),2,3); $now = now_date($time);//日付取得 $now .= UPDATE_MARK; //描画時間 if($stime && DSP_PAINTTIME){ $ptime = ''; if($stime){ $psec = $time-$stime; if($psec >= 86400){ $D = intval($psec/86400); $ptime .= $D.'日'; $psec -= $D*86400; } if($psec >= 3600){ $H = intval($psec/3600); $ptime .= $H.'時間'; $psec -= $H*3600; } if($psec >= 60){ $M = intval($psec/60); $ptime .= $M.'分'; $psec -= $M*60; } if($psec){ $ptime .= $psec.'秒'; } } } //ログ読み込み $fp=fopen(LOGFILE,"r+"); flock($fp, 2); rewind($fp); $buf=fread($fp,1000000); if($buf==''){error("error load log");} $line = explode("\n",$buf); $countline=count($line); for($i = 0; $i < $countline; $i++){if($line[$i]!=""){$line[$i].="\n";};} // 記事上書き $flag = FALSE; for($i = 0; $iサーバがサポートしていない可能性があります",$dest); $size = getimagesize($dest); if(!is_array($size)) error("アップロードに失敗しました
画像ファイル以外は受け付けません",$dest); $chk = md5_of_file($dest); foreach($badfile as $value){if(ereg("^$value",$chk)){ error("アップロードに失敗しました
同じ画像がありました",$dest); //拒絶画像 }} @chmod($dest,0666); $W = $size[0]; $H = $size[1]; // 画像表示縮小 if($W > MAX_W || $H > MAX_H){ $W2 = MAX_W / $W; $H2 = MAX_H / $H; ($W2 < $H2) ? $key = $W2 : $key = $H2; $W = ceil($W * $key); $H = ceil($H * $key); } $mes = "画像のアップロードが成功しました

"; //サムネイル作成 if(USE_THUMB) thumb($path,$tim,$imgext); //ワークファイル削除 if(@file_exists($upfile)) unlink($upfile); if(@file_exists($temppath.$file_name.".dat")) unlink($temppath.$file_name.".dat"); //PCHファイルアップロード $pchtemp = $temppath.$file_name.'.pch'; if(@file_exists($pchtemp)){ copy($pchtemp, PCH_DIR.$tim.'.pch'); if(@file_exists(PCH_DIR.$tim.'.pch')){ @chmod(PCH_DIR.$tim.'.pch',0666); unlink($pchtemp); } } //SPCHファイルアップロード $pchtemp = $temppath.$file_name.'.spch'; if(@file_exists($pchtemp)){ copy($pchtemp, PCH_DIR.$tim.'.spch'); if(@file_exists(PCH_DIR.$tim.'.spch')){ @chmod(PCH_DIR.$tim.'.spch',0666); unlink($pchtemp); } } //旧ファイル削除 if(@is_file($path.$etim.$ext)) unlink($path.$etim.$ext); if(@is_file(THUMB_DIR.$etim.'s.jpg')) unlink(THUMB_DIR.$etim.'s.jpg'); if(@is_file(PCH_DIR.$etim.'.pch')) unlink(PCH_DIR.$etim.'.pch'); if(@is_file(PCH_DIR.$etim.'.spch')) unlink(PCH_DIR.$etim.'.spch'); //ID付加 if(DISP_ID){ if($email&&DISP_ID==1){ $now .= " ID:???"; }else{ $now.=" ID:".substr(crypt(md5(getenv("REMOTE_ADDR").ID_SEED.gmdate("Ymd", $time+9*60*60)),'id'),-8); } } if($eptime) $ptime=$eptime.'+'.$ptime; $line[$i] = "$no,$now,$name,$email,$sub,$com,$url,$host,$epwd,$imgext,$W,$H,$tim,$chk,$ptime\n"; $flag = TRUE; break; } } if(!$flag){ fclose($fp); error("該当記事が見つからないかパスワードが間違っています"); } ftruncate($fp,0); set_file_buffer($fp, 0); rewind($fp); fputs($fp, implode('', $line)); fclose($fp); updatelog(); echo " "; echo "
$mes 画面を切り替えます "; } /* カタログ */ function catalog(){ global $path,$page; $line = file(LOGFILE); $countline=count($line); for($i = 0; $i < $countline; $i++){ list($no,) = explode(",", $line[$i]); $lineindex[$no]=$i + 1; //逆変換テーブル作成 } $tree = file(TREEFILE); $counttree = count($tree); $x = 0; $y = 0; $pagedef = CATALOG_X * CATALOG_Y;//1ページに表示する件数 head($dat); form($dat,''); if(!$page) $page=0; for($i = $page; $i < $page+$pagedef; $i++){ if($tree[$i]==""){ $dat['y'][$y]['x'][$x]['noimg'] = true; }else{ $treeline = explode(",", rtrim($tree[$i])); $disptree = $treeline[0]; $j=$lineindex[$disptree] - 1; //該当記事を探して$jにセット if($line[$j]=="") continue; //$jが範囲外なら次の行 list($no,$now,$name,,$sub,,,,,$ext,$w,$h,$time,,) = explode(",", rtrim($line[$j])); // 画像ファイル名 $img = $path.$time.$ext; // 画像系変数セット if($ext && @is_file($img)){ $src = IMG_DIR.$time.$ext; if($w){ //サイズがある時 if($w > CATALOG_W) $w=CATALOG_W; //画像幅を揃える if(@is_file(THUMB_DIR.$time.'s.jpg')){ $imgsrc = THUMB_DIR.$time.'s.jpg'; }else{ $imgsrc = $src; } }else{$w=CATALOG_W;} //動画リンク if(USE_ANIME){ if(@file_exists(PCH_DIR.$time.'.pch')) $pch = $time.$ext; if(@file_exists(PCH_DIR.$time.'.spch')) $pch = $time.$ext.'&shi=1'; } }else{$txt=true;} // 記事格納 $dat['y'][$y]['x'][$x] = compact('imgsrc','w','no','sub','name','now','pch','txt'); // 変数クリア unset($img,$src,$imgsrc,$w,$no,$sub,$name,$now,$pch,$txt); } $x++; if($x == CATALOG_X){$y++; $x=0;} } $prev = $page - $pagedef; $next = $page + $pagedef; // 改ページ処理 if($prev >= 0) $dat['prev'] = PHP_SELF.'?mode=catalog&page='.$prev; $paging = ""; for($i = 0; $i < count($tree) ; $i+=$pagedef){ if($page==$i){ $pformat = str_replace("", ''.($i/$pagedef).'', PAGING); }else{ $pformat = str_replace("", "".($i/$pagedef)."", PAGING); } $paging.=$pformat; } $dat['paging'] = $paging; if(count($tree) > $next){ $dat['next'] = PHP_SELF.'?mode=catalog&page='.$next; } HtmlTemplate::t_include(CATALOGFILE,$dat); } /*-----------Main-------------*/ $buf=''; init(); //←■■初期設定後は不要なので削除可■■ deltemp(); switch($mode){ case 'regist': if(ADMIN_NEWPOST && !$resto){ if($pwd != ADMIN_PASS){ error("パスワードが違います"); }else{ $admin=$pwd; } } regist($name,$email,$sub,$com,$url,$pwd,$upfile,$upfile_name,$resto,$pictmp,$picfile); break; case 'admin': valid($pass); if($admin=="del") admindel($pass); if($admin=="post"){ $dat['post_mode'] = true; $dat['regist'] = true; head($dat); form($dat,$res,1); HtmlTemplate::t_include(OTHERFILE,$dat); } if($admin=="update"){ updatelog(); echo ""; } break; case 'usrdel': usrdel($del,$pwd); updatelog(); echo ""; break; case 'paint': paintform($picw,$pich,$palette,$anime); break; case 'piccom': paintcom(); break; case 'openpch': openpch($pch,$sp); break; case 'continue': incontinue($no); break; case 'contpaint': if(CONTINUE_PASS) usrchk($no,$pwd); if(ADMIN_NEWPOST) $admin=$pwd; paintform($picw,$pich,$palette,$anime,$pch); break; case 'newpost': $dat['post_mode'] = true; $dat['regist'] = true; head($dat); form($dat,''); HtmlTemplate::t_include(OTHERFILE,$dat); break; case 'edit': editform($del,$pwd); break; case 'rewrite': if(ADMIN_NEWPOST){ if($pwd != ADMIN_PASS){ error("パスワードが違います"); }else{ $admin=$pwd; } } rewrite($no,$name,$email,$sub,$com,$url,$pwd,$admin); break; case 'picrep': replace($no,$pwd,$stime); break; case 'catalog': catalog(); break; default: if($res){ updatelog($res); }else{ echo ""; } } ?>