ちょっと違うコードを書いてみる

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)

同じディレクトリを開いてもリソースは実質減らないとかあるかもしれないのでテストになってないかもしれない(苦笑
ですが,ファイル関数は複雑なので解析はパスって感じで(苦笑