PHPで一覧ページ自動作成
27 1 月 2008動画とか画像だけをそのフォルダに入れて、一覧ページにて自動リンクページを作ると楽ですよね? レンタルサーバーとかを使っているときは、一覧ページとかを表示できないことがあります。 .htaccess が使えるのでしたら、Options Indexes とかでいけますけど、 表示したくないものまで表示されます。 それでは困るし、どうせだったら自作でかっこいいページにしたいですよね? ということで、PHP で 自動リンク作成付一覧ページを作りたいと思います。 ちょっと長いですけど、内容はこんな感じです。 一応いつものごとく サンプルページ を作っておきました。
<?php $sname = $_SERVER['SERVER_NAME']; $https = $_SERVER['HTTPS']; $file = basename($_SERVER['SCRIPT_NAME']); $dir = dirname($_SERVER['SCRIPT_NAME']); if ($https != "on") { $protocol = "http://"; } else { $protocol = "https://"; } // ↓サーバーから見た自分のトップディレクトリ 例(/~hogehoge/) // スラッシュで始まりスラッシュで終わる。 $topdir = "/"; $url = $protocol . $sname . $topdir; // CSSファイルがあれば指定する。 $css = "main.css"; // 自分のトップディレクトリから見た画像ファイルを指定 $dirimg = "img/folder.gif"; $fileimg = "img/file.gif"; // 上のリストと、コピーライトのところに表示する名前 $back_site = "lunq.net"; // コピーライトの表記① $copy[0] = "Copyright © 2008"; // 上のリストと、コピーライトのところに表示する名前のURL $back_url = "http://www.lunq.net/"; // コピーライトの表記② $copy[1] = "All Rights Reserved."; // 一覧で表示させたくないものを記述 // たくさんあれば、追加をしても大丈夫です。 $b[0] = $file; // このファイルの変数名 表示したければ、"" にしてください。 $b[1] = $css; // CSSの変数名 表示したければ、"" にしてください。 $b[2] = "."; // このフォルダという意味 表示したければ、"" にしてください。 $b[3] = ".htaccess"; $b[4] = ".recycle"; $b[5] = "Thumbs.db"; $b[6] = ""; $b[7] = ""; $b[8] = ""; // ↑例えば、$b[9] ~ 多分何個でもいけると思います。 $cssurl = $url . $css; $dirimg = $url . $dirimg; $fileimg = $url . $fileimg; if($dir == "/") { $dirname = " トップディレクトリ"; $titleurl = $url; } else { $urlorg = substr($dir, 1); $dirname = str_replace("/", " > ", $urlorg); $urlencode = urlencode($dir); $urlencode = str_replace("+", "%20",$urlencode); $urlencode = str_replace("%2F", "/",$urlencode); $urlencode = substr($urlencode, 1); $titleurl = $url . $urlencode . "/"; } $i = 0; foreach ($b as $value) { $dlist[$i++] = $value; } $array1 = ($dlist); $hd = opendir('./'); while (false !== ($data[] = readdir($hd))) {} sort($data); $j = count($array1); foreach ($data as $value) { $slist[$j++] = $value; } $array2 = ($slist); $array = $array1 + $array2; $array_unique = array_unique($array); $i = 0; $j = 0; $goukei = 0; foreach($array_unique as $key => $value) { if($key >= count($array1)) { if(filetype($value) == "dir") { $filesize = 0; } else { $filesize = filesize($value); } $name[$i++] = $value; $size[$j++] = $filesize; $goukei += $filesize; } } closedir($hd); if($goukei == 0) $format = "ファイルがありません。"; else if($goukei <= 1024) $format = $goukei." Bytes"; else if($goukei <= (1024*1024)) $format = sprintf ("%.1f kB",($goukei/1024)); else if($goukei <= (999*1024*1024)) $format = sprintf ("%.1f MB",($goukei/(1024*1024))); else if($goukei <= (999*1024*1024*1024)) $format = sprintf ("%.1f GB",($goukei/(1024*1024*1024))); else $format = $goukei." Bytes"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <title><?php print($sname . " > " . $dirname); ?></title> <meta http-equiv="Content-Language" content="ja" /> <meta name="ROBOTS" content="noindex,nofollow" /> <meta name="Title" content="<?php print($sname . " > " . $dirname); ?>" /> <link rel="stylesheet" href="<?php print($cssurl); ?>" type="text/css" media="screen" /> </head> <body> <div> <h1><a id="top"></a><a href="<?php print($titleurl); ?>"><?php print($dirname); ?></a></h1> <h2><?php print($sname); ?></h2> </div> <div> <?php print("<a href=¥"" . $back_url . "¥">" . $back_site . " - Home</a>"); print(" > " . $sname . " > " . $dirname . "¥n"); ?> </div> <div> <?php print($dirname . "¥n > " . "¥n"); print("合計 : " . $format . "¥n"); print(" <hr />¥n"); print("<table>¥n"); foreach ($name as $a) { if (filetype($a) == "dir") { $img = $dirimg; $alt = filetype($a); $format = ""; $value = urlencode($a); $value = str_replace("+", "%20",$value); print(" <tr>¥n <td><img src=¥"" . $img . "¥" alt=¥"" . $alt . "¥" /></td>¥n"); if ($a == ".." && $dir != "/") { print(" <td>◊ <a href=¥"$value¥">このフォルダの上に行く</a></td>¥n"); print(" <td></td>¥n </tr>¥n"); } elseif ($a == ".." && $dir == "/") { print(" <td>◊ トップディレクトリ</td>¥n <td></td>¥n </tr>¥n"); } else { print(" <td> <a href=¥"$value¥">" . $a . "</a></td>¥n"); print(" <td>" . $format."</td>¥n </tr>¥n"); } } } foreach ($name as $a) { if (filetype($a) == "file") { $img = $fileimg; $alt = filetype($a); $size = filesize($a); $goukei += $size; if($size == 0) $format = "ファイルがありません。"; else if($size <= 1024) $format = $size." Bytes"; else if($size <= (1024*1024)) $format = sprintf ("%.1f kB",($size/1024)); else if($size <= (999*1024*1024)) $format = sprintf ("%.1f MB",($size/(1024*1024))); else if($size <= (999*1024*1024*1024)) $format = sprintf ("%.1f GB",($size/(1024*1024*1024))); else $format = $size." Bytes"; $value = urlencode($a); $value = str_replace("+", "%20",$value); print(" <tr>¥n <td><img src=¥"" . $img . "¥" alt=¥"" . $alt . "¥" /></td>¥n"); if ($a == ".." && $dir != "/") { print(" <td>◊ <a href=¥"$value¥">このフォルダの上に行く</a></td>¥n"); print(" <td></td>¥n </tr>¥n"); } elseif ($a == ".." && $dir == "/") { print(" <td>◊ トップディレクトリ</td>¥n <td></td>¥n </tr>¥n"); } else { print(" <td> <a href=¥"$value¥">" . $a . "</a></td>¥n"); print(" <td align=¥"right¥">" . $format."</td>¥n </tr>¥n"); } } } print("</table>¥n"); ?> <hr /> </div> <div align="center"> <?php print("<p> " .$copy[0] . " <a href=¥"" . $back_url . "¥">" . $back_site . "</a> "); print($copy[1] . "</p>¥n"); ?> </div> </body> </html> |
No comments yet
