« PreviousNext »

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 &copy; 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("/", "&nbsp;&gt;&nbsp;", $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 . " &gt; " . $dirname); ?></title>
<meta http-equiv="Content-Language" content="ja" />
<meta name="ROBOTS" content="noindex,nofollow" />
<meta name="Title" content="<?php print($sname . "&nbsp;&gt;&nbsp;" . $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("&nbsp;&gt;&nbsp;" . $sname . "&nbsp;&gt;&nbsp;" . $dirname . "¥n");
?>
</div>

<div>
<?php
print($dirname . "¥n&nbsp;&gt;&nbsp;" . "¥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>&loz;&nbsp;<a href=¥"$value¥">このフォルダの上に行く</a></td>¥n");
      print("  <td></td>¥n </tr>¥n");
    } elseif ($a == ".." && $dir == "/") {
      print("  <td>&loz;&nbsp;トップディレクトリ</td>¥n  <td></td>¥n </tr>¥n");
    } else {
      print("  <td>&nbsp;<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>&loz;&nbsp;<a href=¥"$value¥">このフォルダの上に行く</a></td>¥n");
      print("  <td></td>¥n </tr>¥n");
    } elseif ($a == ".." && $dir == "/") {
      print("  <td>&loz;&nbsp;トップディレクトリ</td>¥n  <td></td>¥n </tr>¥n");
    } else {
      print("  <td>&nbsp;<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>

Posted in HTML | Trackback | del.icio.us | Top Of Page

No comments yet

Leave a Reply