ちょっと違うコードを書いてみる
http://labs.unoh.net/2007/07/dir_walk_recursive.html
はい大好きなfindで手抜きです.
/** * 指定されたディレクトリ内の一覧を取得する * * 指定されたディレクトリに存在するファイルやディレクトリなどの * 一覧を取得します * * @param string $rootDir * オブジェクト取得の基準になるディレクトリ * @result array|null * 正常に一覧が取得できた場合は配列が, * そうでなければnullが返る */ function listObjectInDirectory($baseDirectory) { $result = null; if (file_exists($baseDirectory) == true && is_dir($baseDirectory) == true) { $esc_base_directory = escapeshellarg($baseDirectory); exec("LANG=C find $esc_base_directory -print", $stdout, $exec_result); if ($exec_result == 0) { $stdout = array_map('rtrim', $stdout); // 先頭は自分自身なのでいらない $result = array_slice($stdout, 1); } } return $result; } $result = listObjectInDirectory($root_dir); var_dump($result); var_dump(count($result)); ?>
ここまでドラスティックに変えなくとも(これはこれで問題あるし)glob()の方がスマートに書ける気がします.
あとopendir()しっぱなしで再起かけてるけどリソース枯渇とかないのかなー.
とか思って適当にテストしてみました.
$ php -r 'for ($i = 0; $i < 10000; $i++) {echo "$i\n"; $dh = opendir("/etc"); var_dump($dh); }' | tail 9995 resource(9999) of type (stream) 9996 resource(10000) of type (stream) 9997 resource(10001) of type (stream) 9998 resource(10002) of type (stream) 9999 resource(10003) of type (stream)
同じディレクトリを開いてもリソースは実質減らないとかあるかもしれないのでテストになってないかもしれない(苦笑
ですが,ファイル関数は複雑なので解析はパスって感じで(苦笑