のみ define('TITLE_T', '古い順'); // 正順表示 define('TITLE_R', '新しい順'); // 逆順表示 define('DIR_DEPTH', -1); // 探索するディレクトリの深さを制限する する:0以上 しない:-1 define('SORT_BY_DATE', 1); // 更新日順にする する:1 しない:0 $icons = array( // 拡張子小文字 => 代替画像 ※変更する場合は「検索する拡張子」も適宜変更すること 'pch' => 'icon_arc.png', 'spch' => 'icon_arc.png', 'txt' => 'icon_txt.png', 'pdf' => 'icon_txt.png', 'mhtm' => 'icon_txt.png', 'mht' => 'icon_txt.png', 'swf' => 'icon_mov.png', 'flv' => 'icon_mov.png', 'wav' => 'icon_mov.png', 'mp3' => 'icon_mov.png', 'wmv' => 'icon_mov.png', 'asf' => 'icon_mov.png', 'mp4' => 'icon_mov.png', 'mpeg' => 'icon_mov.png', 'mpg' => 'icon_mov.png', 'avi' => 'icon_mov.png', 'ts' => 'icon_mov.png', 'm2ts' => 'icon_mov.png', 'rar' => 'icon_arc.png', 'zip' => 'icon_arc.png', 'lzh' => 'icon_arc.png', '7z' => 'icon_arc.png', ); $file_ext = '/^(png|jpe?g|gif|pch|spch|txt|pdf|mhtm|mht|mpo|swf|flv|wav|mp3|wmv|asf|mp4|mpeg|mpg|avi|ts|m2ts|rar|zip|lzh|7z)$/i'; // 検索する拡張子 $ignore_file = '/^(THM_|LOG_|img_|tm_).+\.(png|jpe?g|gif)$|_thumb\.(png|jpe?g|gif)$/i'; // 無視するファイル名 $path = realpath('./').'/'.IMG_DIR; /* ヘッダ */ function head(&$dat,$page){ $dat .= ' '.TITLE.' '; if (PUT_DATE && is_file(PHP_SELF2)) { // 更新日付表示 $dat .= '\n"; } $dat .= '
'; if ($page==0) { $dat .= '最終更新:'.date('\'y m月 d日 H:i.').'
前回'; } else { $dat .= '最終'; } $dat .= '更新:'.date('\'y m月 d日 H:i.', filemtime(PHP_SELF2)).'
'; $dat .= "
[更新] [戻る]

サムネイル一覧

'; } /* 表示処理部分 */ function updatesam(){ global $path,$file_ext,$ignore_file,$icons; // ディレクトリ一覧取得、ソート $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(IMG_DIR, FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS)); $iterator->setMaxDepth(DIR_DEPTH); $key1 = $files = array(); foreach ($iterator as $info) { if (preg_match($ignore_file, $info->getFilename())) { continue; } if (preg_match($file_ext, $info->getExtension())) { // ファイル名と拡張子を取得 $tmpext = '.'.$info->getExtension(); $tmpart = $info->getBasename($tmpext); // サムネイル作成 $fixsub = ($iterator->getSubPath() != '') ? str_replace('/','_2F_',$iterator->getSubPath()).'_2F_' : 'root_2F_'; if (!array_key_exists(strtolower($info->getExtension()), $icons)) { $tmpath = THUMB_DIR.$fixsub.$tmpart.$tmpext; if (!function_exists('imagegif') && !is_file($tmpath)) { $tmpath = THUMB_DIR.$fixsub.$tmpart.str_replace('gif','jpg',strtolower($tmpext)); } if (!is_file($tmpath)) { thumb($path,$tmpart,$tmpext,$iterator->getSubPath()); } } // リスト生成 if (SORT_BY_DATE) { // http://www.php.net/manual/ja/class.splfileinfo.php $key1[] = $info->getMTime(); } else { $key1[] = $info->getFilename(); } $files[] = array('subpath' => $iterator->getSubPath(), 'name' => $tmpart, 'ext' => $tmpext, 'fixsub' => $fixsub); } } // チェック if (!$files) { error('ERROR!!
NO IMAGE DATA!'); } // ソート array_multisort($key1, SORT_ASC, SORT_REGULAR, $files); $filesA = array_reverse($files); // 逆順 $filesB = &$files; // 正順 // ページ作成.初期値設定 $p = 0; $fcount = count($files); $tpage = ceil($fcount / PAGE_DEF); // ページ分の繰り返し for ($page = 0; $page < $tpage; ++$page) { $datA = $datB = ''; $pagesA = $pagesB = ''; $dispmsgA = $dispmsgB = ''; $lineA = $lineB = 0; // 枚数分の繰り返し for ($i = 0; $i < PAGE_DEF; ++$i) { $counter = $i + 1; // 逆順表示 $val = current($filesA); if ($val !== false) { next($filesA); $line = $lineA; ++$lineA; // ファイル名と拡張子を取得 $fname = ($val['subpath'] != '') ? $val['subpath'].'/'.$val['name'].$val['ext'] : $val['name'].$val['ext']; $src = $path.$fname; $image = IMG_DIR.$fname; if (IMG_INWH) { // サムネイルの画像サイズ調整 $size = getimagesize($src); // 画像表示縮小 if ($size[0] > MAX_W || $size[1] > MAX_H) { $key_w = MAX_W / $size[0]; $key_h = MAX_H / $size[1]; ($key_w < $key_h) ? $keys = $key_w : $keys = $key_h; $out_w = ceil($size[0] * $keys); $out_h = ceil($size[1] * $keys); } else { $out_w = $size[0]; $out_h = $size[1]; } } // サムネイルがある時は、サムネイルへのリンク、無いときは失敗画像へ $is_icon = array_key_exists(strtolower(substr($val['ext'], 1)), $icons); if (!$is_icon) { $imagepath = THUMB_DIR.$val['fixsub'].$val['name'].$val['ext']; if (!function_exists('imagegif') && !is_file($imagepath)) { $imagepath = THUMB_DIR.$val['fixsub'].$val['name'].str_replace('gif','jpg',strtolower($val['ext'])); } if (is_file($imagepath)) { $piclink = str_replace('%2F','/',rawurlencode($imagepath)); } // URLエンコードを行う else { $piclink = THUMB_FALSE; $piclink = rawurlencode($imagepath); } } // 画像経由先htmlファイル作成 if (IMG_REFER && is_file($src) && !is_file(IMG_REF_DIR.$val['fixsub'].$val['name'].'.htm')) { $fp = fopen(IMG_REF_DIR.$val['fixsub'].$val['name'].'.htm', 'w'); flock($fp, 2); fputs($fp, ''); fflush($fp); flock($fp, 3); fclose($fp); } // 画像テーブル if (IMG_REFER) { $dispmsgA .= ' \n"; } else { $dispmsgA .= ' \n"; } if (!$is_icon) { if (IMG_INWH && is_file($imagepath)) { $dispmsgA .= '
'.$val['name'].$val['ext']."
\n"; } else { $dispmsgA .= '
'.$val['name'].$val['ext']."\n"; } } else { $dispmsgA .= '
'.$val['name'].$val['ext']."\n"; } if ((($counter % PAGE_COLS) == 0) && (($counter % PAGE_DEF) != 0) && ($line != ($fcount-1))) { $dispmsgA .= " \n"; } } // 正順表示 $val = current($filesB); if ($val !== false) { next($filesB); $line = $lineB; ++$lineB; // ファイル名と拡張子を取得 $fname = ($val['subpath'] != '') ? $val['subpath'].'/'.$val['name'].$val['ext'] : $val['name'].$val['ext']; $src = $path.$fname; $image = IMG_DIR.$fname; if (IMG_INWH) { // サムネイルの画像サイズ調整 $size = getimagesize($src); // 画像表示縮小 if ($size[0] > MAX_W || $size[1] > MAX_H) { $key_w = MAX_W / $size[0]; $key_h = MAX_H / $size[1]; ($key_w < $key_h) ? $keys = $key_w : $keys = $key_h; $out_w = ceil($size[0] * $keys); $out_h = ceil($size[1] * $keys); } else { $out_w = $size[0]; $out_h = $size[1]; } } // サムネイルがある時は、サムネイルへのリンク、無いときは失敗画像へ $is_icon = array_key_exists(strtolower(substr($val['ext'], 1)), $icons); if (!$is_icon) { $imagepath = THUMB_DIR.$val['fixsub'].$val['name'].$val['ext']; if (!function_exists('imagegif') && !is_file($imagepath)) { $imagepath = THUMB_DIR.$val['fixsub'].$val['name'].str_replace('gif','jpg',strtolower($val['ext'])); } if (is_file($imagepath)) { $piclink = str_replace('%2F','/',rawurlencode($imagepath)); } // URLエンコードを行う else { $piclink = THUMB_FALSE; $piclink = rawurlencode($imagepath); } } // 画像テーブル if (IMG_REFER) { $dispmsgB .= ' \n"; } else { $dispmsgB .= ' \n"; } if (!$is_icon) { if (IMG_INWH && is_file($imagepath)) { $dispmsgB .= '
'.$val['name'].$val['ext']."
\n"; } else { $dispmsgB .= '
'.$val['name'].$val['ext']."\n"; } } else { $dispmsgB .= '
'.$val['name'].$val['ext']."\n"; } if ((($counter % PAGE_COLS) == 0) && (($counter % PAGE_DEF) != 0) && ($line != ($fcount-1))) { $dispmsgB .= " \n"; } } clearstatcache(); // ファイルのstatをクリア ++$p; } // 改ページ処理 $prev = $page - 1; $next = $page + 1; if ($prev >= 0) { if ($prev == 0) { $pagesA .= '<<前へ '; $pagesB .= '<<前へ '; } else { $pagesA .= '<<前へ '; $pagesB .= '<<前へ '; } } else { $pagesA .= '<<前へ '; $pagesB .= '<<前へ '; } for ($i = 0; $i < $tpage ; ++$i) { if ($page == $i) { $pagesA .= '['.$i.'] '; $pagesB .= '['.$i.'] '; // 表示方法 if ($page == 0) { $tmpA = '

'.TITLE_T.' '.TITLE_R.'

'; $tmpB = '

'.TITLE_T.' '.TITLE_R.'

'; } else { $tmpA = '

'.TITLE_T.' '.TITLE_R.'

'; $tmpB = '

'.TITLE_T.' '.TITLE_R.'

'; } } else { if ($i == 0) { $pagesA .= '[0] '; $pagesB .= '[0] '; } else { $pagesA .= '['.$i.'] '; $pagesB .= '['.$i.'] '; } } } if ($tpage > $next) { $pagesA .= ' '; $pagesB .= ' '; } else { $pagesA .= ' 次へ>>'; $pagesB .= ' 次へ>>'; } // ヘッダHTML head($datA,$page); head($datB,$page); // 総数表示 $datA .= '

画像総数'.$fcount."

\n"; $datB .= '

画像総数'.$fcount."

\n"; // 表示方法 $datA .= $tmpA; $datB .= $tmpB; // ページリンク $datA .= '

'.$pagesA."

\n"; $datB .= '

'.$pagesB."

\n"; // 画像テーブル $datA .= "\n". " \n"; $datB .= "
\n". " \n"; $datA .= $dispmsgA; $datB .= $dispmsgB; $datA .= " \n
\n"; $datB .= " \n\n"; // ページリンク $datA .= '

'.$pagesA."

\n"; $datB .= '

'.$pagesB."

\n"; // 表示方法 $datA .= $tmpA; $datB .= $tmpB; // フッタHTML foot($datA); foot($datB); // 記事部分作成 if ($page == 0) { $logfilename = PHP_SELF2; } else { $logfilename = $page.PHP_EXT; } $fp = fopen($logfilename, "w"); set_file_buffer($fp, 0); rewind($fp); fputs($fp, $datA); fclose($fp); chmod($logfilename,0666); // 記事部分作成 if ($page == 0) { $logfilename_reverse = PHP_SELF2_R; } else { $logfilename_reverse = $page.PHP_EXT_R; } $fp = fopen($logfilename_reverse, 'w'); set_file_buffer($fp, 0); rewind($fp); fputs($fp, $datB); fclose($fp); chmod($logfilename_reverse,0666); } } /* フッタ */ function foot(&$dat){ $dat .= '
レッツPHP! + siokara
'; } /* エラー画面 */ function error($mes){ head($dat,1); echo $dat; echo "




\n", "
",$mes,"

リロード
\n", "


\n"; die(''); } /* サムネイル作成 */ function thumb($path,$tim,$ext,$fixsub=''){ if ($fixsub != '') { $src = $path.$fixsub.'/'.$tim.$ext; $thumb_dir = THUMB_DIR.str_replace('/','_2F_',$fixsub).'_2F_'; } else { $src = $path.$tim.$ext; // ファイル名 $thumb_dir = THUMB_DIR.'root_2F_'; // サムネイル保存ディレクトリ } $W = MAX_W; // 出力画像幅 $H = MAX_H; // 出力画像高さ // 画像の幅と高さとタイプを取得 $size = getimagesize($src); switch ($size[2]) { case 1 : if (function_exists('imagecreatefromgif')) { $im_in = @imagecreatefromgif($src); } else { // gif2png for Unix / gif2png.exe for Win : http://siokara.que.jp/ if (!strncasecmp(PHP_OS,'WIN',3) && is_file(realpath('./gif2png.exe'))) { @exec(realpath('./gif2png.exe')." -z $src",$a); } elseif (is_executable(realpath('./gif2png'))) { @exec(realpath('./gif2png')." $src",$a); } $src_png = $path.$tim.str_replace('gif','png',strtolower($ext)); if (is_file($src_png)) { $im_in = @imagecreatefrompng($src_png); unlink($src_png); } } break; case 2 : $im_in = @imagecreatefromjpeg($src); break; case 3 : if (function_exists('imagecreatefrompng')) { $im_in = @imagecreatefrompng($src); } break; } if (empty($im_in)) { return; } // リサイズ if ($size[0] > $W || $size[1] > $H) { $key_w = $W / $size[0]; $key_h = $H / $size[1]; ($key_w < $key_h) ? $keys = $key_w : $keys = $key_h; $out_w = ceil($size[0] * $keys); $out_h = ceil($size[1] * $keys); } else { $out_w = $size[0]; $out_h = $size[1]; } // 出力画像(サムネイル)のイメージを作成 元画像を縦横とも コピー $im_out = imagecreatetruecolor($out_w, $out_h); imagecopyresampled($im_out, $im_in, 0, 0, 0, 0, $out_w, $out_h, $size[0], $size[1]); // ここでエラーが出る方は下2行と置き換えてください。(GD2.0以下 //$im_out = imagecreate($out_w, $out_h); //imagecopyresized($im_out, $im_in, 0, 0, 0, 0, $out_w, $out_h, $size[0], $size[1]); // サムネイル画像を保存 switch ($size[2]) { case 1 : if (function_exists('imagegif')) { imagegif($im_out, $thumb_dir.$tim.$ext); } else { imagejpeg($im_out, $thumb_dir.$tim.str_replace('gif','jpg',strtolower($ext)), THUMB_QUALITY); } break; case 2 : imagejpeg($im_out, $thumb_dir.$tim.$ext, THUMB_QUALITY); break; case 3 : imagepng($im_out, $thumb_dir.$tim.$ext); break; } // 作成したイメージを破棄 imagedestroy($im_in); imagedestroy($im_out); } /* 初期設定 */ function init(){ $err=''; if(!is_writable(realpath('./')))error('カレントディレクトリに書けません
'); @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.'を読めません
'; @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(IMG_REFER){ @mkdir(IMG_REF_DIR,0777);@chmod(IMG_REF_DIR,0777); if(!is_dir(realpath(IMG_REF_DIR)))$err.=IMG_REF_DIR.'がありません
'; if(!is_writable(realpath(IMG_REF_DIR)))$err.=IMG_REF_DIR.'を書けません
'; if(!is_readable(realpath(IMG_REF_DIR)))$err.=IMG_REF_DIR.'を読めません
'; } if($err)error($err); } /*-----------Main-----------*/ init(); //←■■初期設定後は不要なので削除可■■ updatesam(); echo ''; ?>