php - 如何使用 PHP 递归地包含文件夹中具有特定名称的所有文件?

标签 php recursion include

假设我有一个名为 parent 的文件夹 其中有许多子文件夹,例如 child1child2 等。 其中一些“子”文件夹中有一个名为 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;
}

最佳答案

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

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

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

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

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

关于php - 如何使用 PHP 递归地包含文件夹中具有特定名称的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887613/

相关文章:

Javascript 对素数求和崩溃

recursion - Rust:在递归函数中使用可变引用

html - 使用 form 属性并将 input 元素放在 HTML 中的 form 标签之外是一种好习惯吗?

wordpress - 将 Wordpress Core 包含到自己的脚本中

java - Eclipse:包括带有 war 文件项目的库

php - 使用 JSON 的实时搜索功能

php - 我无法在 Codeigniter 中循环显示 div id

java - 如何从 for 循环关系中创建循环关系

php - 我怎样才能使我的数据库响应时间和渲染时间更好?

php - 使用 PDO 执行基于另一个查询结果的查询的功能