Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过写入配置文件来构造配置语句_Php_Mysql_Config_Codeigniter 2_Codeigniter 3 - Fatal编程技术网

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

Php 通过写入配置文件来构造配置语句,php,mysql,config,codeigniter-2,codeigniter-3,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']['pa

我试图将数据库配置语句插入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']['stricon']=FALSE;
如果(!write_file('../dropma/application/config/database.php',$data,'a+'))
{
echo“无法写入文件”;
}
其他的
{
echo“文件已写入!”;

}
而不是
$data
,传递
$db

write_file('../dropma/application/config/database.php', $db, 'a+')
实际上,根据文件:

参数:

 $path (string) – File path 
 $data (string) – Data to write to file 
 $mode (string) – fopen() mode
传递的“$data”应为字符串。它不起作用,因为您正在传递一个数组

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

更新:

由于您试图更改不同环境(dev、prod等)的DB设置,因此我将使用index.php中定义的
ENVIRONMENT
常量来决定应用程序应该使用哪个DB组

这是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' => '',
];
完成此操作后,您需要做的就是设置变量
$\u SERVER['CI\u ENV']
,您可以在Apache虚拟主机文件中执行此操作

参考:处理多个环境


它显示文件已写入,但未写入任何内容更新了我的回答我这样做是为了更新配置文件,否则它将显示无效的数据库配置,它将放置在AWS服务器上,我将写入另一个文件夹,但它适用于普通字符串,有没有办法把这个数组转换成字符串?为什么你不能修改database.php而不是创建一个新的。我过去所做的是在database.php中有两组数组,看起来像
$db['dev']=[…]
$db['prod']=[…],那么您所要做的就是设置“活动”标志
$active\u group='prod'这有意义吗?确切地说,我正在尝试这样做,因为我在codeigniter外部运行一个脚本,并为第一次使用设置codeigniter实例,我必须写入该文件,否则在第一次登录时,用户将收到一个错误,说数据库配置无效