如何创建php函数来编辑config.php

时间:2015-01-28 15:56:04

标签: php fopen

在一个项目中,我需要加载一些没有数据库查询的基本配置,如何创建一个编辑该文件的函数。

config.php可能是这样的:

 <?php 
define(DEBUG, TRUE);    
define (LANG, 'en');
define(THEME, 'joy');                                                                    

define(DB_NAME, 'cms');
define(DB_USER, 'root');
define(DB_PASSWORD, '000');
define(DB_HOST, 'localhost');

define(CACHE, '3600');
define(CLOSE, TRUE);
.....

ajax.php

$key = $_POST['key'];
$value = $_POST['value'];

function change_config($key,$value){
  // how ?
}

如果我想更改缓存时间,我可以运行change_config('CACHE','1800') 如果我想更改调试值,我可以运行change_config('DEBUG',false)

2 个答案:

答案 0 :(得分:1)

您可以始终采用简单的路线并使用runkit_constant_redefine

runkit_constant_redefine($key, $value);

但是,当然,常量是静态的。直接编辑该文件意味着正确地清理输入,并且每次都从上到下重写文件。如果文件大小没有变化,并且常量值的长度也没有变化,那么你可以使用fwrite在它存在的确切块上写入,但这通常不是解决方案。也就是说,使用数据库。他们并不难学。

修改

当我指的是使用数据库时,我暗示的是DB连接以外的设置,这些设置应该是静态的,或者应该使用环境变量之类的设置进行更改,而不是手动编辑。

答案 1 :(得分:0)

你可以这样做:

<?php

$key = $_POST['key'];
$value = $_POST['value'];

require_once 'config.php';

function change_config($key,$value){
    $newContent = "<?php \n
                    define(DEBUG, " . ($key == "DEBUG"?$value:DEBUG) . "); \n
                    define(LANG, '" . ($key == "LANG"?$value:LANG) . "'); \n
                    define(THEME, '" . ($key == "THEME"?$value:THEME) . "'); \n";

    file_put_contents('config.php', $newContent);

}

您使用新内容覆盖文件。我们创建一个字符串,它将保存NEW config.php文件的内容。 \n适用于新行。

然后我们遍历所有的定义行并将它们放在字符串中。对于值,我们使用Ternary Operator。简单地说,这是一个if语句,它将检查密钥是否对应于构建的定义。如果是这样,我们将把新值放入其中。如果没有,我们将输入OLD CONFIG.php值。