我一直在绞尽脑汁,试图弄清楚为什么这个简单的函数不起作用,我想是时候看看是否有其他人能找到我缺少的东西了。该函数是一个相当简单的代码片段,它将递归地搜索目录、子目录和子目录等等,并加载到应用程序运行所需的PHP文件中。
一如既往,我们感谢任何指导和协助。谢谢
代码
global $_MWC;
$_MWC = array(); // Create blank array to overwrite previously used data.
$_MWC['base'] = dirname(__FILE__); // Equal to "/base"
// Create a function that will recursively load PHP files needed to run application.
function require_all_functions($dir) {
global $_MWC;
$scan = glob($_MWC['base'] . '/' . $dir . '/*');
foreach ($scan as $path) {
if (preg_match('/'.php$/', $path)) {
require_once $path;
}elseif (is_dir($path)){
require_all_functions($path);
}
}
}
// Lets load all files in the addons directory for use in the system.
require_all_functions('addons');
print_r(get_included_files()); // FOR TESTING ONLY
输出
Array ( [0] => /base/addons/a.php )
文件结构
/base/addons/a.php
/base/addons/sub1/b.php
/base/addons/sub1/sub2/c.php
以下是实现此的步骤
- 获取当前目录中的文件,将它们放入数组
- 获取当前目录中的文件夹
- 循环通过它们
- 在每个目录上调用函数本身
- 将结果追加到$files数组
- 到达所有文件夹和子文件夹后,返回$files
示例:
function glob_recursive($pattern)
{
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern)));
}
return $files;
}
$phpFiles = glob_recursive($_MWC['base'] . '/' . $dir . '/*.php');
foreach($phpFiles as $phpFile){
require_once $phpFile;
}
或者,您可以使用迭代器来获得一个稍微好一点的代码:
$d = new RecursiveDirectoryIterator(dirname(__FILE__));
$Iterator = new RecursiveIteratorIterator($d);
$php_files = new RegexIterator($Iterator, '/'.php$/', RecursiveRegexIterator::GET_MATCH);
iterator_apply($php_files,"require_once");
执行此操作时:
$_MWC = dirname(__FILE__);
$_MWC['base']
不存在,dirname返回字符串:$_MWC . '/' . $dir...
将error_reporting设置为-1可以查看这些类型的错误。