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



