Динамическая конфигурация Codeigniter - PullRequest
3 голосов
/ 18 августа 2011

Как разрешить пользователям устанавливать конфигурацию базы данных для новой установки CI?

Мое намерение состоит в том, чтобы иметь форму, которая позволяет им вводить данные, а затем либо генерировать новый файл конфигурации, либо устанавливать параметры в файле database.php.

Возможно ли это?

1 Ответ

2 голосов
/ 18 августа 2011

Допустим, вы хотите создать файл конфигурации базы данных. Вот как я это делаю:

Создайте «фиктивный» файл конфигурации, скопировав реальный, и используйте значения, которые выглядят примерно так:

$db['default']['hostname'] = '__HOSTNAME__';
$db['default']['username'] = '__USERNAME__';
$db['default']['password'] = '__PASSWORD__';
$db['default']['database'] = '__DATABASE__';

Попросите пользователя заполнить форму установки и проверить все данные, протестировав соединение с базой данных. Затем, используйте file_get_contents(), чтобы получить содержимое файла конфигурации "dummy", используйте простой str_replace(), чтобы переписать значения с теми, которые предоставил пользователь, а затем записать новое содержимое в ваш реальный файл конфигурации, перезаписав все это.

Вот часть реального кода, который я использую для создания файла, просто чтобы понять. Имейте в виду, что я запускаю это на совершенно отдельной установке CI («установщик»), и это не пример копирования / вставки:

// Write the database configuration file
$config = array(
    'hostname',
    'username',
    'password',
    'database',
);

$data = file_get_contents(APPPATH.'config/dummy_database.php');
$file = '../private/config/database.php';

// Oops! Just caught this after posting: str_replace() accepts arrays.
// TODO: Use the array method instead of a loop!
foreach ($config as $item)
{
    $data = str_replace('____'.strtoupper($item).'____', mysql_escape_string($this->data[$item]), $data);
}
if (write_file($file, $data))
{
    $this->message('Database configuration file was written!', 'success');
    @chmod($file, 0644);
    {
        if (is_really_writable($file))
        {
            $this->message('The database configuration is still writable, make sure to set permissions to <code>0644</code>!', 'notice');
        }
    }
}
else
{
    $this->message('Could not write the database configuration file!');
    redirect('step_4');
}

При этом сохраняется оригинальная копия "фиктивного" файла конфигурации. Вы можете использовать ту же логику для редактирования, просто прочитать текущие значения конфигурации для всего, что пользователь не изменил, и выполнить ту же технику замены строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...