Foreach glob将文件包含在子目录中

时间:2011-02-05 20:31:10

标签: php include foreach glob

我正在尝试学习如何使用glob()将所有文件包含在目录中,但是我似乎无法让它工作。这是我现在的代码:

foreach (glob("addons/*.php") as $filename) {
include $filename;
}

但是单个文件包含似乎工作正常:

include "addons/hello.php";

这就是我的文件结构:

主题

-addons

- hello.php

-index.php

-options.php

所以我不确定问题出在哪里。代码在(主题)子目录本身内部,如果它完全不同的话。感谢。

4 个答案:

答案 0 :(得分:3)

使用它进行测试:

foreach (glob("addons/*.php", GLOB_NOCHECK) as $filename) {
    PRINT $filename . "\n";
}

如果目录相对于当前不存在,那么它将显示addons/*.php作为输出。

答案 1 :(得分:1)

这个递归函数应该可以解决这个问题:

function recursiveGlob($dir, $ext) {
    $globFiles = glob("$dir/*.$ext");
    $globDirs  = glob("$dir/*", GLOB_ONLYDIR);

    foreach ($globDirs as $dir) {
        recursiveGlob($dir, $ext);
    }

    foreach ($globFiles as $file) {
        include $file;
    }
}

用法:recursiveGlob('C:\Some\Dir', 'php');

如果您希望它对单个文件执行其他操作,只需替换include $file部分。

答案 2 :(得分:0)

确保文件路径是绝对的(来自服务器的根目录)。

就我而言,这个例子没有问题:

$dir = getcwd();//can be replaced with your local path

foreach (glob("{$dir}/addons/*.php") as $filename) {
     if(file_exists($filename))
     {
         //file exists, we can include it
         include $filename;
     }
     else
     {
         echo 'File ' . $filename . ' not found<br />';
     }
};

答案 3 :(得分:0)

Include将使用搜索路径(虽然它通常包括当前工作目录)不限于此...使用带有相对目录路径的glob()将始终相对于当前工作目录。在你进入循环之前......确保你当前的工作目录是你认为使用echo getcwd()的地方......你可能会发现你毕竟不在Theme子目录中;但是Theme子目录位于搜索路径中。