Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP编辑用于配置的PHP文件_Php_Configuration Files - Fatal编程技术网

通过PHP编辑用于配置的PHP文件

通过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

首先,我假设这是一种不错的做法,因为各种流行的软件都使用这种方法,比如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';
$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;
}