getSettings()似乎只读取并输出目录中的1个settings.php文件。如何让它读取并输出所有的settings.php文件内容?
<?php
$config = array("os"=>"windows","directory"=>"../Core-Stack/Themes/","ignore"=>array('_vti_cnf','cgi-bin','.','..'));
function getSettings($dir, $issubdir = false) {
global $config, $SETTINGS;
if ($config['os'] == "unix")
$delimiter = "/";
else if ($config['os'] == "windows")
$delimiter = "\\";
if (!file_exists($dir) || !is_dir($dir) || !is_readable($dir)) {
echo "Error: \"$dir\" is not a directory, or I cannot read it properly.";
return 0;
} else if ($od = opendir($dir)) {
while (($file = readdir($od)) !== false) {
if (!in_array($file, $config['ignore'])) {
$path = $dir . $delimiter . $file;
if (is_dir($path))
getSettings($path, true);
elseif (is_file($path) && $file == "settings.php")
include ($path);
}
}
closedir($od);
}
}
getSettings($config['directory'], true);
echo "Theme Name: ";
echo $SETTINGS['theme_name'];
echo "<br>";
echo "Theme Creator: ";
echo $SETTINGS['theme_creator'];
echo "<br>";
echo "Theme Version: ";
echo $SETTINGS['theme_version'];
echo "<br>";
echo "Theme Creation Date: ";
echo $SETTINGS['theme_creation_date'];
?>
答案 0 :(得分:0)
您的“设置”文件很可能是以$SETTINGS = array(...);
的方式定义设置,当然这样您只能看到最新包含文件中的内容。你可以在这里做什么而不重塑整个事情将是:
不改变settings.php
:
//...
elseif (is_file($path) && $file == "settings.php") {
$OLD_SETTINGS = $SETTINGS;
include ($path);
$SETTINGS = array_merge($OLD_SETTINGS, $SETTINGS);
}
//...
或者如果您可以更改settings.php
文件:
//...
elseif (is_file($path) && $file == "settings.php") {
$SETTINGS = array_merge($SETTINGS, include ($path));
}
//...
//----in settings.php
return array(
'option' => 'foobar',
//...
);
当然,如果我的意图正确的话。如果没有 - 那么请编辑您的问题并添加更多详细信息。
<强>更新强>
你也可以使用scandir
在较少的行中拟合函数,并防止在树非常深的情况下堆的潜在问题,如下所示:
function getSettings($dir, $issubdir = false) {
global $config, $SETTINGS;
if (!file_exists($dir) || !is_dir($dir) || !is_readable($dir)) {
echo "Error: \"$dir\" is not a directory, or I cannot read it properly.";
return 0;
} else if ($files = scandir($dir)) {
foreach ($files as $file) {
if (in_array($file, $config['ignore'])) continue;
$path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($path))
getSettings($path, true);
elseif (is_file($path) && $file == "settings.php")
$SETTINGS = array_merge($SETTINGS, include ($path));
}
}
}
答案 1 :(得分:0)
你应该在递归之前存储目录内容,你的else-if块应该是这样的:
else if ($od = opendir($dir)) {
$subdirs = array();
while (($file = readdir($od)) !== false) {
if (!in_array($file, $config['ignore'])) {
$path = $dir . $delimiter . $file;
if (is_dir($path)) $subdirs[] = $path;
elseif (is_file($path) && $file == "settings.php") include ($path);
}
}
closedir($od);
foreach($subdirs as $subdir)
getSettings($subdir, true);
}