PHP объединяет массивы из старого в новый файл конфигурации - PullRequest
0 голосов
/ 01 июня 2018

Мой старый файл конфигурации для моего приложения выглядит следующим образом:

<?php
return array(
    'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
    'DOMAIN' => $_SERVER['HTTP_HOST'],
    'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
    'DEBUG' => true,
    'EMAIL_USED_MAILER' => 'phpmailer',
    'SEND_MAIL_TO' => 'myreal@email.com'
  );

Новый файл конфигурации выглядит следующим образом:

<?php
return array(
    'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
    'DOMAIN' => $_SERVER['HTTP_HOST'],
    'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
    'DEBUG' => false,
    'EMAIL_USED_MAILER' => 'phpmailer',
    'SEND_MAIL_TO' => 'your_mail@example.net',
    'SEND_MAIL_FROM' => '',
    'NEW_VAR' => 'foo'
  );

Теперь я хочу объединить эти два файла при запуске upgrade.phpв новый файл, который должен выглядеть следующим образом:

<?php
return array(
    'URL' => 'https://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])),
    'DOMAIN' => $_SERVER['HTTP_HOST'],
    'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',
    'DEBUG' => true,
    'EMAIL_USED_MAILER' => 'phpmailer',
    'SEND_MAIL_TO' => 'myreal@email.com',
    'SEND_MAIL_FROM' => '',
    'NEW_VAR' => 'foo'
  );

Я пытаюсь использовать array_merge, но в моем случае это не работает из-за таких переменных, как $ _SERVER.Есть идеи, как это решить?

1 Ответ

0 голосов
/ 01 июня 2018

Во-первых, чтобы убедиться, что я правильно понял ваш вопрос - мой ответ основан на следующих предположениях:

  1. Вы разрабатываете PHP-приложение, которое устанавливается на несколько серверов (либо самостоятельно, либодругие могут загрузить ваше приложение).
  2. Каждая установка может иметь свою собственную конфигурацию, скажем, в файле с именем config.php
  3. Вы читаете эту конфигурацию пользователя где-то в вашем приложении, скажем,у вас есть такая функция, как getConfig() { $config = include('config.php'); return $config; }
  4. Вы обновляете это приложение, и с этим обновлением появляются некоторые новые параметры конфигурации, которые пользователь может изменить.

Если выше указанывсе верно, тогда я предлагаю следующий рабочий процесс:

  1. НЕ трогайте файл конфигурации пользователя.Да, это может быть сделано автоматически, но это довольно сложно сделать правильно, и шанс испортить вещи велик.Например: что, если у пользователя есть опция, написанная в две строки - синтаксически правильная PHP, но если вы сделали в своем файле upgrade.php предположение, что каждая конфигурация находится в одной строке, вы, вероятно, сломаете его или ее конфигурационный файл.

  2. Документируйте новые параметры конфигурации где-нибудь и / или предоставьте config.example.php со всеми доступными параметрами.

  3. Измените текущий существующий getConfig() -Функция (от предположения 3) до чего-то вроде ниже, так что вы делаете безопасное слияние, которое гарантированно сработает:

Код:

function getConfig() { 
    $applicationDefaultConfig = array(
        'SEND_MAIL_FROM' => '',
        'NEW_VAR' => 'foo'            
    );
    $usersConfig = include('config.php'); 
    return array_merge($applicationDefaultConfig, $usersConfig); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...