我正在尝试将数据库配置语句插入到database.php但无法正确构造它,我错过了单/双引号和转义引号,因为我不知道如何转义$ db并且只有localhost打印到该文件。请指导如何完成此操作。所有配置语句都需要打印到文件,即database.php,现在只打印localhost。
$data = $db['$username']['hostname'] = 'localhost';
$db['$username']['username'] = 'root';
$db['$username']['password'] = '';
$db['$username']['database'] = '$username';
$db['$username']['dbdriver'] = 'mysql';
$db['$username']['dbprefix'] = '';
$db['$username']['pconnect'] = TRUE;
$db['$username']['db_debug'] = TRUE;
$db['$username']['cache_on'] = FALSE;
$db['$username']['cachedir'] = '';
$db['$username']['char_set'] = 'utf8';
$db['$username']['dbcollat'] = 'utf8_general_ci';
$db['$username']['swap_pre'] = '';
$db['$username']['autoinit'] = TRUE;
$db['$username']['stricton'] = FALSE;
if ( ! write_file('../dropma/application/config/database.php', $data, 'a+'))
{
echo 'Unable to write the file';
}
else
{
echo 'File written!';
}
答案 0 :(得分:0)
而不是$data
,传递$db
:
write_file('../dropma/application/config/database.php', $db, 'a+')
实际上,根据文档:
https://www.codeigniter.com/userguide3/helpers/file_helper.html#write_file
参数:
$path (string) – File path $data (string) – Data to write to file $mode (string) – fopen() mode
" $ data"传递应该是一个字符串。它没有用,因为你传递了一个数组......
我应该问,你为什么要这样做?你为什么要创建该文件?以及如何/在哪里放置和执行此脚本?也许这是一种更容易实现你想要做的事情的方法。
<强>更新强>
由于您正在尝试更改不同环境(dev,prod等)的数据库设置,那么我要做的是使用index.php中定义的ENVIRONMENT
常量来决定哪个数据库您的应用应该使用的分组。
这是默认情况下应该在index.php上设置的内容:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
所以在database.php中你可以这样做:
switch(ENVIRONMENT){
case 'staging':
$active_group = 'staging';
break;
case 'production':
$active_group = 'prod';
break;
default:
$active_group = 'dev';
break;
}
$db['staging'] = [
'dsn' => '',
'hostname' => '',
'username' => '',
];
$db['prod'] = [
'dsn' => '',
'hostname' => '',
'username' => '',
];
$db['dev'] = [
'dsn' => '',
'hostname' => '',
'username' => '',
];
完成此操作后,您所要做的就是担心设置您可以在Apache虚拟主机文件中执行的变量$_SERVER['CI_ENV']
。
参考:处理多个环境 https://www.codeigniter.com/user_guide/general/environments.html