Как заменить конфигурацию базы данных в codeigniter? - PullRequest
5 голосов
/ 21 марта 2019

Я сошел с ума установщик для моего сайта. но я не знаю, как заменить hostname, username, password и database. со значениями, поступающими из полей ввода. Это код из config/database.php файла.

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'db_host',
    'username' => 'db_user',
    'password' => 'db_pass',
    'database' => 'db_name',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

но этот код выдает мне эту ошибку.

enter image description here

и этот код в controller.

function configure_database() {
    // write database.php
    $data_db = file_get_contents('./application/config/database.php');
   // session_start();
    $data_db = str_replace('db_name',   $_POST['dbname'],   $data_db);
    $data_db = str_replace('db_user',   $_POST['username'], $data_db);
    $data_db = str_replace('db_pass',   $_POST['password'], $data_db);
    $data_db = str_replace('db_host',   $_POST['hostname'], $data_db);
    file_put_contents('./application/config/database.php', $data_db);
  }

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Вы можете отформатировать config/database.php следующим образом:

$db['default']['username'] = "%USERNAME%";
$db['default']['password'] = "%PASSWORD%";
$db['default']['database'] = "%DATABASE%";
$db['default']['hostname'] = "%HOSTNAME%";
$db['default']['dbdriver'] = "mysqli";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Затем записать в него, используя этот метод:

function configure_database() {
    // write database.php
    $data_db = file_get_contents('config/database.php');
    // session_start();
    $temporary = str_replace("%DATABASE%", $_POST['dbname'],   $data_db);
    $temporary = str_replace("%USERNAME%", $_POST['username'], $temporary);
    $temporary = str_replace("%PASSWORD%", $_POST['password'], $temporary);
    $temporary = str_replace("%HOSTNAME%", $_POST['hostname'], $temporary);
    // Write the new database.php file
    $output_path = './application/config/database.php';
    $handle = fopen($output_path,'w+');
    // Chmod the file, in case the user forgot
    @chmod($output_path,0777);
    // Verify file permissions
    if(is_writable($output_path)) {
        // Write the file
        if(fwrite($handle,$temporary)) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

В основном, он проверяет каждую строку на соответствие, а затемзамените их опубликованными данными и, наконец, снова запишите их в конфигурацию базы данных.

Ссылка: Установщик CodeIgniter

0 голосов
/ 21 марта 2019

Если вы хотите динамически установить элемент конфигурации или изменить существующий, вы можете сделать это, используя:

$this->config->set_item('item_name', 'item_value');

Где item_name индекс массива $ config, который вы хотите изменить, и item_value это его значение.

Так что вы можете попробовать это:

 // validate the input
 if(isset($_POST['dbname']){
     $this->config->set_item('hostname',$_POST['dbname']);
 }
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...