2014-06-27 96 views
0

我想動態更新數據庫配置文件。首先,我將主題文件從一個目錄複製到另一個目錄。這些主題文件包含一個數據庫配置文件。用另一個文件替換整行PHP

將文件複製完後,我想更新數據庫配置文件以使用創建的新數據庫的名稱(使用$ dbname)。

$dbname = "Database 1"; 

$data = file('file.php'); // reads an array of lines 
function replace_a_line($data) { 
    if (stristr($data, 'dbname=')) { 
    return 'dbname=' . $dbname . ''; 
    } 
    return $data; 
} 
$data = array_map('replace_a_line',$data); 
file_put_contents('file.php', implode('', $data)); 

file.php:

$this->pdo = new PDO('mysql:host=localhost; dbname=', '', ''); 

我上面的功能的問題是,它取代只是

dbname= 

整條生產線,我不知道如何使用與回報正確的語法來添加,全線的PHP

我需要它看起來像這樣:

$this->pdo = new PDO('mysql:host=localhost; dbname=test', '', ''); 

我可以使用什麼來保留原始的php行,只需添加到dbname =?

如果我用包含上述PHP行的整個文件替換了這行,那麼我可以插入整個PHP行呢?

+1

你不覺得有這樣做的更好的方法嗎?我看不到你的數據庫設置文件,但是如何將'$ dbname'作爲參數傳遞給某個函數,並在函數在數據庫設置文件中執行時填入它? –

+0

是啊這是我第一次動態創建數據庫,所以我打開並欣賞建議 – cpcdev

回答

1

下面是你的代碼中的一些更正,使其作爲喲你的期望:

$data = file('file.php'); // reads an array of lines 
function replace_a_line($data) { 
    $dbname = "Database 1"; 
    if (stristr($data, 'dbname=')) { 
    return str_replace('dbname=', 'dbname=' . $dbname, $data); 

    } 
    return $data; 
} 
$data = array_map('replace_a_line',$data); 
file_put_contents('file.php', implode('', $data)); 
+0

這使得行完全消失 – cpcdev

+0

沒有錯誤,但現在它並沒有改變行 – cpcdev

+0

林想知道如果文件權限需要改變。現在它的644。 – cpcdev

1

我認爲你有點過度了。

這裏是我的建議,創建一個包含數據庫設置

$config = array(
    // These are the settings for development mode 
    'development' => array(

     'db' => array(
      'host'  => 'xxxx', 
      'dbname' => 'yyyy', 
      'username' => 'xxx', 
      'password' => 'zzzzz', 
      ),  
     ), 

    // These are the settings for production mode 
    'production' => array(

     'db' => array(
      'host'  => 'xzzz', 
      'dbname' => 'fsfs', 
      'username' => 'dsdsd', 
      'password' => 'xsscsc', 
      ), 
     ), 
    ); 

一個配置文件,你會通過傳遞不同的配置,以你的數據庫類的構造函數動態地使用:

class Database{ 
    include("config.php"); 
    private $pdo; 
    private $config; 

    // constructor 
    function __construct($mode) {   
     $this->config = $config[$mode]; 
    } 


    public function get_connection(){ 
     $this->pdo = new PDO(
      'mysql:host=' . $this->config['db']['host'].';dbname=' . $this->config['db']['dbname'], 
      $this->config['db']['username'], 
      $this->config['db']['password'], 
      array()); 

     // If there is an error executing database queries, we want PDO to 
     $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     return $this->pdo; 
    } 

    public function __destruct(){ 
     $this->pdo = null; 
    } 

} 

用法:

$db = new Database('production'); 
$pdo = $db->get_connection(); 
+0

請參閱我對原始問題的編輯。我需要能夠在配置文件中替換$ dbname,因爲我正在複製包含配置文件的主題文件。 – cpcdev

相關問題