在一个项目中,我需要加载一些没有数据库查询的基本配置,如何创建一个编辑该文件的函数。
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)
答案 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值。