На самом деле это довольно сложный процесс.
MojoMotor , основанный на CI, имеет установочный скрипт, который добавляет дополнения к application/config/database.php
, что означает, что это не невозможно.
Лицензионное соглашение для MM запрещает мне публиковать фактический скрипт установки, но вы должны иметь возможность создавать что-то, что работает.
В противном случае представьте что-то вроде этого:
// Data from user input
$db_config['hostname'] = $this->input->post('db_host');
$db_config['username'] = $this->input->post('db_user');
$db_config['password'] = $this->input->post('db_password');
$db_config['database'] = $this->input->post('db_name');
$db_config['dbdriver'] = $this->db_driver;
$db_config['dbprefix'] = $this->db_prefix;
$db_config['pconnect'] = ($this->input->post('pconnect')) ? TRUE : FALSE;
$this->CI =& get_instance();
$this->CI->load->helper('file');
$prototype = array(
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysql',
'dbprefix' => 'mojo_',
'pconnect' => TRUE,
'db_debug' => FALSE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci'
);
// Now we read the file data as a string
$config_file = read_file(APPPATH.'config/database'.EXT);
// Dollar signs seem to create a problem with our preg_replace
// so we'll temporarily swap them out
$config_file = str_replace('$', '@s@', $config_file);
// Cycle through the newconfig array and swap out the data
if (count($dbconfig) > 0)
{
foreach ($dbconfig as $key => $val)
{
if ($val === 'y')
{
$val = TRUE;
}
elseif ($val == 'n')
{
$val = FALSE;
}
if (is_bool($val))
{
$val = ($val == TRUE) ? 'TRUE' : 'FALSE';
}
else
{
$val = '\''.$val.'\'';
}
$val .= ';';
// Update the value
$config_file = preg_replace("#(\@s\@db\[(['\"])".$active_group."\\2\]\[(['\"])".$key."\\3\]\s*=\s*).*?;#", "\\1$val", $config_file);
}
}
// Put the dollar signs back
$config_file = str_replace('@s@', '$', $config_file);
// Just to make sure we don't have any unwanted whitespace
$config_file = trim($config_file);
// Write the file
$fp = fopen($this->database_path, FOPEN_WRITE_CREATE_DESTRUCTIVE);
flock($fp, LOCK_EX);
fwrite($fp, $config_file, strlen($config_file));
flock($fp, LOCK_UN);
fclose($fp);
Я не проверял это, но я пытаюсь реализовать что-то похожее на один из моих собственных проектов.
Надеюсь, это может немного приблизить вас.