Скорее всего, ваши "файлы настроек" определяют настройки как-то как $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));
}
}
}