PHP递归文件加载器


PHP Recursive File Loader

我一直在绞尽脑汁,试图弄清楚为什么这个简单的函数不起作用,我想是时候看看是否有其他人能找到我缺少的东西了。该函数是一个相当简单的代码片段,它将递归地搜索目录、子目录和子目录等等,并加载到应用程序运行所需的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

以下是实现此的步骤

  1. 获取当前目录中的文件,将它们放入数组
  2. 获取当前目录中的文件夹
  3. 循环通过它们
  4. 在每个目录上调用函数本身
  5. 将结果追加到$files数组
  6. 到达所有文件夹和子文件夹后,返回$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可以查看这些类型的错误。