我想动态更新数据库配置文件。首先,我将主题文件从一个目录复制到另一个目录。这些主题文件包含数据库配置文件。
复制文件后,我想更新数据库配置文件以使用创建的新数据库的名称(使用$ 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行吗?
答案 0 :(得分: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',
),
),
);
您可以通过将不同的配置传递给db类构造函数来动态使用:
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();
答案 1 :(得分: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));