假设我有一个名为 parent
的文件夹
其中有许多子文件夹,例如 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;
}
最佳答案
尽管包含所有文件听起来是一个糟糕的设计,但这是可能的:
$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/