如何让用户为新的CI安装设置数据库配置?
我的意图是拥有一个表单,允许他们输入数据,然后生成新的配置文件或设置database.php文件中的选项。
这可能吗?
答案 0 :(得分:2)
假设您要创建数据库配置文件。我是这样做的:
通过复制真实的配置文件来创建“虚拟”配置文件,并使用如下所示的值:
$db['default']['hostname'] = '__HOSTNAME__';
$db['default']['username'] = '__USERNAME__';
$db['default']['password'] = '__PASSWORD__';
$db['default']['database'] = '__DATABASE__';
让用户完成安装表单,并通过测试数据库连接验证所有数据。接下来,使用file_get_contents()
获取“虚拟”配置文件的内容,使用简单的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');
}
这保留了“虚拟”配置文件的原始副本。您可以使用相同的逻辑进行编辑,只需读取用户未更改的任何内容的当前配置值,并执行相同的字符串替换技术。