Home > PHP

指定ディレクトリ以下のファイルとディレクトリ名を取得する

2011.09.07 1:39
 あるディレクトリ配下のファイルをすべて読み込むというようなソースがどっかに落ちてないかなと思いつつ探してみたところ全然なかったので自分でつくりました。いわゆるRecursiveに読み込むにはどんな風なアルゴリズムがいいのか全然わからなかったので、読み込む階層を指定して何とかそれらしいものをつくることができました。
 例えばライブラリーにあるクラスファイルを一度に呼んでインクルードしておきたいときなんか大変便利です。Shellのコマンド使えばいいって話なんですが、なんかわかりませんが意地でPHPでつくりました。
 存在するディレクトリは
$class_file_object->recursive_dirs
で取り出せます。
 存在するファイルは、
$class_file_object->class_files
で取り出せます。
 いずれも配列に複数入っているというようなことを前提にしています。

$class_lib_dir = "./lib";
$class_file_object = new directory_control;
$class_file_object->class_file_include(class_directory);
#var_dump($class_file_object->class_files);
#var_dump($class_file_object->recursive_dirs);
class directory_control {

    # プロパティー設定
    public $recursive_dirs = array();        # クラスファイルのあるディレクトリパス取得 [OUT]
    public $class_files = array();            # クラスファイルのパス取得 [OUT]
    public $dir_read_level = 5;                # クラスファイルのあるディレクトリの読み込み階層
   
    #--------------------------------
    # クラスファイルをすべて読み込む
    #--------------------------------
    function class_file_include ($class_lib_dir) {

        $this->recursive_dirs = array();
        $this->recursive_dirs[0] = $class_lib_dir;
       
        #---------------------------------------------------------------
        # 指定階層までphpファイルとディレクトリを読み込んで入れるに格納
        #---------------------------------------------------------------
        for($i=0;$i<$this->dir_read_level;$i++) {
            if ($this->recursive_dirs) {
                foreach ($this->recursive_dirs as $index=>$recursive_dir) {
                    if ($dh = opendir($recursive_dir)) {
                        while (($file = readdir($dh)) !== false) {
                            if(!is_dir($file) && preg_match("/(.+)(\.[^.]+$)/",$file)){#拡張子のあるファイルを検出
                                $class_file = $recursive_dir.$file;
                                $bool = array_push($this->class_files,$class_file);
                             } elseif (!is_dir($file)) {
                                 $add_recursive_dir = $recursive_dir.$file.'/';
                                 $bool = array_push($this->recursive_dirs,$add_recursive_dir);
                                 array_unique($this->recursive_dirs);
                             }
                        }
                    }
                    closedir($dh);
                }
            }
        }
        #----------------------
        # クラスファイルの整理
        #----------------------
        $this->class_files = array_unique($this->class_files);
        foreach ($this->class_files as $index=>$class_file_path) {
            include("$class_file_path");
        }
        #--------------------
        # ディレクトリの整理
        #--------------------
        $this->recursive_dirs = array_unique($this->recursive_dirs);
    }
}






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer