2

假设我有一个名为parent In 的文件夹,其中有许多子文件夹child1,例如child2等。其中一些“子”文件夹中有一个名为module.php. 如何递归检查文件夹的所有子parent文件夹并包含在我的应用程序中命名的所有文件module.php

我尝试了以下方法,但无法弄清楚出了什么问题:

if ( !function_exists( 'glob_recursive' ) ) {
  function glob_recursive( $pattern, $flags = 0 ) {
    $files = glob( $pattern, $flags );
    foreach ( glob( dirname( $pattern ) . '/*', GLOB_ONLYDIR|GLOB_NOSORT ) as $dir ) {
      $files = array_merge( $files, glob_recursive( $dir . '/' . basename( $pattern ), $flags ) );
    }
    return $files;
  }
}

foreach ( glob_recursive( locate_template('/lib/modules/*/module.php' ) as $module ) {
  require_once $module;
}
4

1 回答 1

4

尽管包含所有文件听起来像是一个糟糕的设计,但有可能:

$directory = new RecursiveDirectoryIterator('path/to/project/');
$recIterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($recIterator, '/\/module.php$/i');

foreach($regex as $item) {
    include $item->getPathname();
}

顺便说一句,此示例源自PHP 手册中的注释。要使其正常工作,请确保该文件夹中的 PHP 可以读取所有子文件夹。如果不能确保这一点,您将不得不为此编写一个自定义递归函数(但这不太可能)。

同样,您所做的不是一个好的设计,并且会导致问题(比您想象的要早)。如果您遵循 OOP 风格,更好的方法是使用autloadPHP 的机制。

于 2013-06-02T21:47:46.577 回答