2008年1月8日火曜日

 

ディレクトリのファイルを一覧表示

ディレクトリツリー
PHPの基礎体力

■ ディレクトリデータモデル
配列は、「添え字 => 値」という関係になっていて、どのようなデータ型でも入れることが出来ます。あるディレクトリ内部を獲得しようとした時、「ディレクトリ」であれば「キー」に「ディレクトリ名」を格納し、「値」には下位の内容を配列で格納します。
「ファイル」ならば「キー」に「ファイル名」を格納し、値には「パス」を格納することにします。
以下は、ディレクトリを配列に格納した時のイメージ図です。
ディレクトリ( ./sample )内を配列に格納した時のデータモデル図
<? Array ( [edithead.php] => ./sumple/edithead.php [conf.txt] => ./sumple/conf.txt [file.html] => ./sumple/file.html [strings.html] => ./sumple/strings.html [data] => Array ( [template] => Array ( [file.data] => ./sumple/data/template/file.data [file.data.bak] => ./sumple/data/template/file.data.bak [readme.txt] => ./sumple/data/template/readme.txt ) [log.txt] => ./sumple/data/log.txt ) ) ?>
ディレクト内のファイル名を獲得するには、先ず opendir() でディレクトリのハンドルを獲得後、readdir() で次々とファイル名を読み出し、全て読み終えたところで、closedir() でディレクトリハンドルを閉じるという流れになります。
ディレクトリ内のファイル一覧を配列で獲得する関数( function grtdirtree() )
< //***************************************************** // function getdirtree( $dir ) //  指定したディレクトリ以下のファイル一覧を獲得します。 //----------------------------------------------------- // 引 数:ディレクトリを示す文字列 // 戻り値:ファイル一覧を格納した配列 // 注 意:$dir は、スクリプトから見た相対パスを指定します。 //***************************************************** function getdirtree( $dir ) { if( !is_dir( $dir ) ) // ディレクトリでなければ false を返す return false; $tree = array(); // 戻り値用の配列 if( $handle = opendir( $dir ) ) { while ( false !== $file = readdir( $handle ) ) { // 自分自身と上位階層のディレクトリを除外 if( $file != "." && $file != ".." ) { if( is_dir( $dir."/".$file ) ) // ディレクトリならば再帰呼出 $tree[ $file ] = getdirtree( $dir."/".$file ); else // ファイルならばパスを格納 $tree[ $file ] = $dir."/".$file; } } closedir( $handle ); uasort( $tree, "strcmp" ); // uasort() でないと添え字が失われます } return $tree; } ?>

ディレクトリのファイルを一覧表示
eWeb

ディレクトリのファイルを一覧表示 ディレクトリ内のファイルを一覧表示します。あわせて、ファイルサイズや最終更新日も表示することが可能です。

<?php
$rep = 1; // 最終更新日(表示=1 非表示=0)
$sze = 1; // ファイルサイズ(表示=1 非表示=0)
$lst = "./list"; // 表示するリストの名前(パス)

$drc=dir($lst);
print("<OL>");
while($fl=$drc->read()) {
  $lfl = $lst."/".$fl;
  $din = pathinfo($lfl);
  if(is_dir($lfl) && ($fl!=".." && $fl!=".")){
    print("<LI>".$din["basename"]."<FONT size='-1'> (ディレクトリ)</FONT></LI>");
  } else if($fl!=".." && $fl!=".") {
    print("<LI>");
    print("<a href=".$lst."/".$fl.">".$fl."</a>");
    // ファイル更新日
    if($rep == 1 || $sze == 1) print("<FONT size='-1'> (");
    if($rep == 1) echo date("m/d",filemtime($lfl));
    if($rep == 1 && $sze == 1) print(", ");
    // ファイルサイズ
    if($sze == 1) echo round(filesize($lfl)/1024)."KB";
    if($rep == 1 || $sze == 1) print(")</FONT> ");
    print("</LI>");
  }
}
print("</OL>");
$drc->close();
?>
実行結果
  1. dummy1.txt (02/18, 0KB)
  2. dummy2.txt (02/18, 0KB)
  3. dummy3.txt (02/18, 0KB)
  4. dummy4.txt (02/18, 0KB)
  5. dummy5.txt (02/18, 0KB)
  6. sampleimage01.gif (02/18, 1KB)
  7. sampleimage02.gif (02/18, 1KB)
  8. sampleimage03.gif (02/18, 1KB)
  9. sampleimage04.gif (02/18, 1KB)
  10. sampleimage05.gif (02/18, 1KB)
  11. dummyDir1 (ディレクトリ)
  12. sampleDir1 (ディレクトリ)
※ファイルへのリンクは削除して有ります
参考
PHPの基礎体力
http://www.sound-uz.jp/php/
eWeb
ホームページ作成支援,Web Design
http://www.eweb-design.com/

ラベル: ,


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google