我正在尝试学习如何使用glob()将所有文件包含在目录中,但是我似乎无法让它工作。这是我现在的代码:
foreach (glob("addons/*.php") as $filename) {
include $filename;
}
但是单个文件包含似乎工作正常:
include "addons/hello.php";
这就是我的文件结构:
主题
-addons
- hello.php
-index.php
-options.php
所以我不确定问题出在哪里。代码在(主题)子目录本身内部,如果它完全不同的话。感谢。
答案 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子目录位于搜索路径中。