我有一个标准的配置文件:$variable = 'value';
,但在最后一刻出现了使用Web界面进行配置。那么读取文件的最佳方法是什么,找到变量的值然后再次重新保存文件?
目前我有两个想法:
1)RegExp
2)保留某个数组示例
答案 0 :(得分:1)
将所有配置值存储在关联数组中,如下所示:
$config = array(
'variable' => 'value'
);
对于Web界面,您可以轻松遍历整个阵列:
foreach($config as $key=>$value) { ... }
进行更改后,循环遍历数组并将其写回文件。 (不过你真的应该使用数据库)。
当您包含该文件时,您可以像这样使用它:
include('config.php');
echo $config['variable']
// or
extract($config);
echo $variable;
注意:如果解压缩,它将使用您在解压缩之前定义的相同名称覆盖任何变量。
PS - 为了便于读写文件,我只想使用json编码来序列化数组。
答案 1 :(得分:0)
如果您的配置是用户定义的 - 最好将配置存储在数据库中。否则你有这个“小说”问题要解决,但也可能引入安全问题。即任何一个用户都可以编辑配置文件 - 它们必须可写入网络服务器用户。这打开了通过Web漏洞将恶意代码注入此文件的大门 - 或者只是直接访问您的服务器(共享主机?)的人找到这个可写文件并根据自己的喜好进行更新(例如,添加“<?php header('Location: my site'); die;
”在它)。
如果您必须使用配置文件进行管理,请包含要读取的文件,并var_export要写入的变量。如果只有一个配置变量,即数组,这是最容易做到的。 e.g:
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);
}
}
上面的代码使用variable variables来覆盖配置文件中的一次变量。最后两个示例中的每一个都可以轻松地适应同时更新多个变量。