php - 列出包含特定文件的文件夹

时间:2014-07-30 12:02:01

标签: php directory

php脚本应该列出所有可用的“模块”。模块是一个至少包含info.php文件的子目录。

现在我需要一个包含“info.php”文件的所有子目录的列表(即所有模块的列表)并提供此代码:

    $modules = array();

    if ( $handle = opendir( MODULE_DIR ) ) {
        while ( false !== ( $entry = readdir( $handle ) ) ) {
            if ( $entry === '.' || $entry === '..' ) { continue; }

            $info_file = MODULE_DIR . $entry . '/info.php';
            if ( ! is_file( $info_file ) ) { continue; }

            $modules[] = $entry;
        }
        closedir( $handle );
    }

问题:是否有更短/更好的方式来获取列表,最好没有循环?

2 个答案:

答案 0 :(得分:1)

看一下RecursiveDirectoryIterator

http://php.net/manual/en/class.recursivedirectoryiterator.php

在您的情况下,代码看起来像这样:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));

foreach($it as $key => $item) {
    if(basename($key) === 'info.php') {
        echo dirname($key) . PHP_EOL;
    }
}

答案 1 :(得分:1)

使用函数glob()

可以实现一个漂亮而干净的解决方案
foreach(glob('src/*/info.php') as $path) {
    echo basename(dirname($path)) . PHP_EOL;
}