2

我正在编写一个能够通过 Web 界面编辑设置的 PHP 应用程序。我的意思不是让用户(实际上,它只是管理员)能够在文本编辑器中加载文件,而是他们使用表单进行更改,这将更改设置文件(并做其他事情)。

在开发的这个阶段,设置存储在一个 PHP 文件中,例如:

定义('UPLOAD_DIR','上传/');
定义('DISPLAY_NUM',真);
$names = array('a' => 'b','c'=>'d','e'=>'f');

然而,解析数组(并且它们比上面的更复杂(即多级嵌套)),似乎并不那么有趣。而且由于可以添加和删除特定设置,读取整个文件,然后再次写出所有设置,看起来也不好玩。

使用以下格式有哪些优点和缺点?(以及我错过的任何其他人):

  • 自定义 XML
  • INI(能够使用 parse_ini_file)

(由于项目的要求,适合使用数据库。我知道在很多情况下,数据库会更受欢迎,只是在这种情况下不是。)

如果您无法使用数据库,并且必须存储可以使用 Web 界面进行编辑的设置,您会怎么做?

(注意:这是一个与问题不同的问题,其中设置无法更改,它一直是 PHP 文件。是的,安装程序当前确实写出了一个具有正确设置的 PHP 文件。)

4

7 回答 7

2

如果您不致力于使用 XML,您可能会考虑使用YAML。我只将它与 Ruby 一起使用,但快速的Google建议有一些 PHP 支持选项。TBF,那里的链接包括一些反对将 YAML 与 PHP 结合使用的论点,但 YMMV。

于 2009-05-11T11:44:10.373 回答
1

好的,我没有得到任何我想要的答案。这是我所期待的。

INI

  • 将设置存储在 INI 文件中可能适用于您希望用户手动编辑的简单设置。
  • 然而,创建复杂的数组并不容易,并且需要一些心理杂技来理解哪个标题在数组的哪个级别。
  • 保留字,不能在文件的任何地方使用,包括:yes、no、true 和 false,这可能有问题。
  • 可以在文件中使用常量。
  • 没有内置的写出 INI 文件的方法。

XML

  • 可以使用 SimpleXML Extension,它“提供了一个非常简单且易于使用的工具集”将 XML 转换为可以使用常规方法处理的对象。
  • 允许使用非常复杂的数组。
  • 如果需要,可以手动编辑。
  • 可以使用外部工具来验证文件的有效性。
  • 许多可用于 PHP 的 XML 处理器。

YAML

记住:没有数据库。需要能够使用复杂的数组。

于 2009-05-19T12:31:31.633 回答
0

我不喜欢有人可以直接访问设置的想法,因此提供一个接口来充当缓冲区、防止蓄意攻击并确保输出干净是很重要的。

考虑到这一点,服务器端格式的选择根本不重要,只要您可以正确地与它交互,所有其他问题都可以解决。

于 2009-05-11T11:32:21.020 回答
0

我推荐一个自定义 XML 文件,这样您的配置就可以很好地扩展,并且您可以使用 PHP XML 库来访问它。

一个简单的例子:

<myconfig>
  <define>
    <name>UPLOAD_DIR</name>
    <value>uploads/</value>
  </define>
  <define>
    <name>DISPLAY_NUM</name>
    <value>true</value>
  </define>
  <array id="names">
    <value index="a">b</value>
    <value index="c">d</value>
    <value index="e">f</value>
  </array>
</myconfig>
于 2009-05-11T11:37:20.153 回答
0

PHP 内置了用于编辑和解析 INI 文件的函数,这些文件使用纯文本格式来存储程序设置。

于 2009-05-11T13:46:56.710 回答
0

我使用了两步法。变量及其名称存储在数据库中,并带有一个界面,使用户能够更改它们。当他们更改它们时,文件会保存到服务器上,然后在整个应用程序中引用(这些更改也会保存回数据库)。使更新变得容易,使备份变得简单——无需备份文件,只需备份数据库。生成的文件只是格式为 $variableName = 'variablevalue'; 的 .inc 文件。

于 2009-05-11T23:36:10.647 回答
0

为什么不是普通的php?

配置-form.php

形式method=POST action='configure.php'

输入字段例如。name='upload' value='<?php echo UPLOAD; ?>'

一个 configure.php 文件:

$myfile = 'sets.php';
$fh = fopen( $myfile, 'w' );
$upload = '"/upload/"';
$txt = "define( UPLOAD, '" . $_POST['upload'] . "' );";
fwrite( $fh, $txt );
fclose( $fh );

你有它。为您创建配置文件的简单 php。

于 2010-04-01T05:41:45.340 回答