通过PHP编辑用于配置的PHP文件
首先,我假设这是一种不错的做法,因为各种流行的软件都使用这种方法,比如SMF 总之,我现在有以下代码:通过PHP编辑用于配置的PHP文件,php,configuration-files,Php,Configuration Files,首先,我假设这是一种不错的做法,因为各种流行的软件都使用这种方法,比如SMF 总之,我现在有以下代码: <?php // main visual config $cfg['lang'] = 'en'; // paths $path['admin'] = 'index.php?p=admin'; $path['admin2'] = 'zvfpcms/admin'; $path['root'] = 'zvfpcms'; $path['images'] = 'zvfpcms/img
<?php
// main visual config
$cfg['lang'] = 'en';
// paths
$path['admin'] = 'index.php?p=admin';
$path['admin2'] = 'zvfpcms/admin';
$path['root'] = 'zvfpcms';
$path['images'] = 'zvfpcms/img';
$path['css'] = 'zvfpcms/css';
$path['js'] = 'zvfpcms/js';
$path['pages'] = 'zvfpcms/pg';
?>
问题是,我想通过一个接口直接编辑$cfg变量
这将如何实现?我认为替换字符串不是一个好主意,尤其是当我创建的未来$cfg变量有很多可能性(甚至无限)时
或者,我必须接受一种不同的方法
感谢您的回答 只需在数据库中设置所有设置,当设置更改时,重新生成配置文件。不要让PHP编辑PHP代码。改为使用XML配置文件。读取XML信息,如果要进行更改,请更改从XML文件生成的数据结构中的值,并将其返回到新的配置文件中。将设置存储在数据库中,或者可以使用标准ini文件(键=值对) 读一下:
function loadSettings() {
$cfg = array();
foreach (file('settings.ini') as $line) {
list ($key, $value) = explode('=', $line);
$cfg[$key] = $value;
}
return $cfg;
}
文件I/O的效率低于标准的数据库调用,尤其是当您已经有一个打开的数据库连接时。我认为这是一种不好的做法,因为您可以在编辑之前运行一个系统,但在编辑时会出现一些错误(可能您没有转义一个引号字符)在编辑之后,整个应用程序变得不可用,因为PHP无法解析配置文件,这几乎会影响您所做的一切 XML建议并不坏,因为您可以处理读取XML时发生的任何错误 如果你有一个数据库(读了这篇文章,看起来你没有使用,这很好),那将是存储数据的最佳位置——这就是它的用途。在平面文件世界中,读入非PHP文件并对其进行解释比自己自动编辑PHP文件要好得多。可以让您轻松地从不同的源(包括PHP文件/数组)读取和写入配置。不过,您可能需要将
$cfg
移动到它自己的文件中,并将其包括在内,以便其他变量等不受影响
您也可以自己使用,然后在文件上写入,同样,您可能需要将变量移动到它自己的文件中。我认为这将编写比Pear类更混乱/可读性更低的PHP。与我的类似,只是您使用的是XML文件。在国际海事组织,无论哪种方法都是最好的方法。我认为,根据具体情况,采用这两种方法都是最好的方法。有时,直接访问文件比在数据库中查找存储配置设置的表要简单得多。考虑到配置的数据几乎在每个页面上都使用,这会影响速度吗?使用平面文件的效率比数据库低。如果你不能使用数据库,那么平面文件显然是你唯一实用的选择。差别可以忽略不计。ASP.Net在许多应用程序范围的设置中使用平面文件。该软件是平面文件,但我仍然会响应。假设一个用户“Bob”。Bob重命名zvfpcms文件夹。这将如何处理?如果是平面文件,请使用Spencer使用XML文件的想法。如果脚本确定它运行在不同于XML文件规定的目录中,则应重新生成PHP配置文件。是否有用于转义引号的函数?我想它叫addslashes?
function loadSettings() {
$cfg = array();
foreach (file('settings.ini') as $line) {
list ($key, $value) = explode('=', $line);
$cfg[$key] = $value;
}
return $cfg;
}