通过写入配置文件来构造配置语句

时间:2017-05-18 03:29:33

标签: php mysql config codeigniter-2 codeigniter-3

我正在尝试将数据库配置语句插入到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!';
    }

1 个答案:

答案 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