我有一个标准的配置文件:$variable = 'value';
,但在最后一刻想用网络界面来配置它。那么读取文件,找到变量值然后再次重新保存文件的最佳方法是什么?
目前我有2个想法:
1) RegExp
2) 保留某处数组示例
我有一个标准的配置文件:$variable = 'value';
,但在最后一刻想用网络界面来配置它。那么读取文件,找到变量值然后再次重新保存文件的最佳方法是什么?
目前我有2个想法:
1) RegExp
2) 保留某处数组示例
将所有配置值存储在关联数组中,如下所示:
$config = array(
'variable' => 'value'
);
对于 Web 界面,您可以轻松地遍历整个数组:
foreach($config as $key=>$value) { ... }
进行更改后,循环遍历数组并将其写回文件。(不过,您确实应该为此使用数据库)。
包含文件时,您可以像这样使用它:
include('config.php');
echo $config['variable']
// or
extract($config);
echo $variable;
注意:如果您提取,它将覆盖您在提取之前可能已定义的同名变量。
PS - 为了更容易读取和写入文件,我只使用 json 编码来序列化数组。
如果您的配置是用户定义的 - 最好将配置存储在数据库中。否则,您需要解决这个“新”问题,但也可能会引入安全问题。即任何一个用户都能够编辑您的配置文件——它们必须对网络服务器用户是可写的。这为通过网络漏洞将恶意代码注入此文件打开了大门 - 或者只是直接访问您的服务器(共享主机?)的人找到这个可写文件并根据他们的喜好更新它(例如,将“ <?php header('Location: my site'); die;
”放入其中)。
如果您必须使用配置文件管理它,请包含文件以读取它,并var_export变量以写入它。如果只有一个配置变量,那就是数组,这是最容易做到的。例如:
function writeConfig($config = array()) {
$arrayAsString = var_export($config, true);
$string = "<?php\n";
$string .= "\$config = $arrayAsString;\n";
file_put_contents('config.php', $string);
}
如果您只更改一些变量 - 只需在重写之前包含配置文件:
function writeConfig($edits = array()) {
require 'config.php';
$edits += $config;
$arrayAsString = var_export($edits, true);
$string = "<?php\n";
$string .= "\$config = $arrayAsString;\n";
file_put_contents('config.php', $string);
}
如果您的配置文件中有多个变量,请使用get defined vars并循环它们以将文件写回:
function writeConfig($_name = '', $_value) {
require 'config.php';
$$_name = $_value; // This is a variable variable
unset($_name, $_value);
$string = "<?php\n";
foreach(get_defined_vars() as $name => $value) {
$valueAsString = var_export($value, true);
$string .= "\$$name = $valueAsString;\n";
file_put_contents('config.php', $string);
}
}
上面的代码使用了变量 variables,覆盖了配置文件中的一个变量。最后两个例子中的每一个都可以很容易地适应同时更新多个变量。