【问题标题】:structure config statements by writing to the config file通过写入配置文件来构造配置语句
【发布时间】:2017-05-18 03:29:33
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    而不是$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”应该是一个字符串。它不起作用,因为您正在传递一个数组......

    我应该问,你为什么要这样做?你为什么要创建那个文件?以及该脚本将如何/在哪里放置和执行?也许有一种更简单的方法来完成你想做的事情。

    更新:

    由于您尝试更改您的不同环境(开发、产品等)的数据库设置,那么我要做的是使用 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' => '',
    ];
    

    完成此操作后,您所要做的就是设置变量$_SERVER['CI_ENV'],您可以在 Apache 虚拟主机文件中执行此操作。

    参考:处理多个环境 https://www.codeigniter.com/user_guide/general/environments.html

    【讨论】:

    • 表示文件已写入,但未写入任何内容
    • 更新了我的答案
    • 我这样做是为了更新我的配置文件,否则它会说无效的数据库配置,它将被放置在 AWS 服务器上,我正在写入另一个文件夹,但它适用于普通字符串,是有没有办法可以将此数组转换为字符串?
    • 为什么你不能修改 database.php 而不是创建一个新的。我过去所做的是在 database.php 中有两组数组,它​​们看起来像 $db['dev'] = [...];$db['prod'] = [...]; ,那么你所要做的就是设置你的“活动”标志 $active_group = 'prod'; 这有意义吗?
    • 没错,我正在尝试这样做,因为我在 codeigniter 之外运行脚本并设置 codeigniter 实例以供第一次使用,否则在第一次登录时用户将写入该文件得到一个错误,说无效的数据库配置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多