Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помощь по php

ITBR Ученик (15), на голосовании 9 месяцев назад
Помогите написать код, который будет собирать конфигурацию из нескольких папок и файлов. Структура файлов следующая:
config
|-- default
| |-- db.php
| |-- debug.php
| |-- language.php
| `-- template.php
|-- development
| `-- db.php
`-- production
|-- db.php
`-- language.php

При этом код должен работать следующим образом:
¾ если в системном окружении есть переменная PROJECT_PHP_SERVER и она равна development, то должны быть подключены все файлы из папки default, данные занесены в перемененную $config, затем подключены файлы из папки development, а полученные данные должны перетереть соответствующие пункты сохраненные в $config.
¾ аналогичное поведение если PROJECT_PHP_SERVER равна production (естественно только для папки production)
¾ если переменной нет, или она задана неверно, то подключаются только файлы из папки default.
Голосование за лучший ответ
Инспектор Жопидý Оракул (86396) 10 месяцев назад
Вот код, который соответствует вашим требованиям:

```php
<?php

// Получаем значение переменной PROJECT_PHP_SERVER
$server = getenv('PROJECT_PHP_SERVER');

// Если переменная существует и равна development
if ($server && $server === 'development') {

// Подключаем файлы из папки default
$config = require __DIR__ . '/config/default/db.php';
$config = require __DIR__ . '/config/default/debug.php';
$config = require __DIR__ . '/config/default/language.php';
$config = require __DIR__ . '/config/default/template.php';

// Подключаем файлы из папки development и перетираем соответствующие пункты в $config
$config = require __DIR__ . '/config/development/db.php';
$config = require __DIR__ . '/config/development/language.php';
} elseif ($server && $server === 'production') {

// Подключаем файлы из папки default
$config = require __DIR__ . '/config/default/db.php';
$config = require __DIR__ . '/config/default/language.php';

// Подключаем файлы из папки production и перетираем соответствующие пункты в $config
$config = require __DIR__ . '/config/production/db.php';
} else {

// Подключаем файлы из папки default
$config = require __DIR__ . '/config/default/db.php';
}

// Возвращаем конфигурацию
return $config;
```

Этот код работает следующим образом:

* Сначала мы получаем значение переменной PROJECT_PHP_SERVER. Если она не существует, то мы просто подключаем файлы из папки default.
* Если переменная существует, то мы проверяем ее значение. Если оно равно development, то мы подключаем файлы из папки development и перетираем соответствующие пункты в переменную $config. Если значение равно production, то мы делаем то же самое, только подключаем файлы из папки production.
* В конце мы возвращаем переменную $config.

Вот пример использования этого кода:

```php
$config = load_config();

// Выводим значение параметра database_host из конфигурации
echo $config['database_host'];
```

Этот код выведет значение параметра database_host из конфигурации, которая будет зависеть от значения переменной PROJECT_PHP_SERVER. Если переменная не существует или задана неверно, то будет выведено значение параметра database_host из папки default.
Пришёл И высушил носки Знаток (424) 10 месяцев назад
Любишь её?
Или ты Питарас?
Я так и знал что твоя Девушка!
root Ученик (145) 10 месяцев назад
 const PROJECT_PHP_SERVER = 'production';

$loadConfigEnv = static function(string $folder = '', string $path = __DIR__ .DIRECTORY_SEPARATOR): array
{
$config = [];
is_readable($path .$folder) || $folder = 'default';

if ($glob = glob($path .$folder .DIRECTORY_SEPARATOR .'*.php', GLOB_NOSORT | GLOB_ERR)) {
foreach ($glob as $glob) {
$config = array_merge($config, require $glob);
}
}

return $config;
};

print_r($loadConfigEnv(PROJECT_PHP_SERVER));
Похожие вопросы