エントリー

PHPでディレクトリの内容をリスト表示

自分用にメモ。

ディレクトリの内容をリストですべて表示するプログラム。記事のツリー表示や全文検索やサイトマップ自動作成などに応用できるかもしれません。

<?php

function get_tree($path)
{ 
  if (!is_dir($path)) {
    return;
  }

  $trees = array();

  if ($dir = scandir($path)) {
    foreach ($dir as $entry) {
      if ($entry == '.' or $entry == '..') {
        continue;
      }
      if (is_dir($path . '/' . $entry)) {
        $trees[$entry] = get_tree($path . '/' . $entry);
      } else {
        $trees[$entry] = $path . '/' . $entry;
      }
    }
  }

  return $trees;
}

function put_tree($trees)
{
  if (!is_array($trees)) {
    return;
  }

  echo '<ul>';

  foreach ($trees as $key => $value) {
    if (is_array($value)) { 
      echo '<li>[d] ' . $key;
      put_tree($value);
      echo '</li>';
    } else {
      echo '<li>[f] '.  $key . '</li>';
    }
  }

  echo '</ul>';

  return;
}

$dir   = './sample'; //sampleディレクトリの内容を表示
$trees = get_tree($dir);

?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>ディレクトリ表示</title>
</head>
<body>
<?php put_tree($trees); ?>
</body>
</html>

実行すると以下のようにリストタグでツリー表示されます。ディレクトリには [d]、ファイルには [f] が表示されます。

<ul>
  <li>[d] sample1
    <ul>
      <li>[d] sample1-1
        <ul>
          <li>[f] sample1-1-1.txt</li>
          <li>[f] sample1-1-2.txt</li>
        </ul>
      </li>
      <li>[f] sample1-1.txt</li>
      <li>[f] sample1-2.txt</li>
    </ul>
  </li>
  <li>[d] sample2
    <ul>
      <li>[f] sample2-1.txt</li>
      <li>[f] sample2-2.txt</li>
    </ul>
  </li>
  <li>[f] test1.txt</li>
  <li>[f] test2.txt</li>
</ul>

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed