我应该在PHP应用程序中对配置文件使用YAML吗?
我目前正在编写我自己的PHP框架(用于kicks,而不是用于关键任务的东西),我正在尝试添加功能,用户可以在其中设置框架应该使用的数据库(一个主数据库,然后可能是一个或两个回退,如sqlite),某些文件的位置,等等。我应该使用YAML吗?是否有更好的方法或标准做法 我的想法我应该在PHP应用程序中对配置文件使用YAML吗?,php,yaml,Php,Yaml,我目前正在编写我自己的PHP框架(用于kicks,而不是用于关键任务的东西),我正在尝试添加功能,用户可以在其中设置框架应该使用的数据库(一个主数据库,然后可能是一个或两个回退,如sqlite),某些文件的位置,等等。我应该使用YAML吗?是否有更好的方法或标准做法 我的想法 YAML在可读性方面对用户(非技术)友好 为了使我的框架不需要非标准的PHP库,我必须使用类似的方法来解析文件 Symfony不是要离开YAML吗 我可以使用一个充满变量的PHP文件,但这会使框架的设置对用户不那么透明 更
我通常做的是创建一个XML文件,并创建一个非依赖的前端来修改XML文件中的设置。如果您正在编写一个框架,那么是的。您必须完成更多的工作,但是框架的目标是让开发应用程序的人更容易 Symfony不是要离开YAML吗 否,Symony2几乎完全由YAML配置。否 个人经历。YAML似乎是一个很棒的想法,我喜欢它和它的简单。然后我开始在这上面投入时间:能够用一种语言阅读和用另一种语言写作的概念非常诱人,但是。。。简言之,它原来只是一种幻觉,没有事实根据 YAML的每个实现都与其他实现有太大的不同
- 一个自动序列化的数组有时不能被另一个读取
- 支持交叉引用,但它们的实现非常粗略
引用功能强大,但:
- 对于某些硬核应用程序来说,它们非常有限
- 对于大多数基于YAML的低端项目来说,它们都是一种过激行为
因此,大多数解析器经常会忽略它们,并在它们的基础上出错
- JSON如果您将跨语言数据交换语言和小冗余方面作为最高优先级
- INI如果您重视性能和向后兼容性(在PHP上,因为
是快速的,而且从那时起…总是如此)和人类的可读性/可编辑性parse_INI_file()
$config = array(
'database' => array(
'default' => array(
'name' => 'dbname',
'host' => 'localhost',
'user' => 'username',
'pass' => 'password'
)
)
);
然后您可以像这样引用配置设置
$host = $config['database']['default']['host'];
下一步是保持配置文件的简单性,存储所需的最少配置数据,然后使用数据库存储其余的配置数据,并为最终用户提供管理屏幕以更改应用程序中的设置。我对配置文件格式有了更多的了解,并发现了YAML格式的有趣事实 主要是它几乎没有缺点 1) 它包括安装和配置附加PHP库,因为YAML模块不是默认的,或者必须与symphony框架解耦并使用它 2) 与INI、XML、JSON相比,所有配置技术中的读写性能最差。与INI文件相比,读取时间要长得多 3) 与INI和XML格式相比,可读性不好。当它变大时,就很难用人道的眼光来阅读和管理 4) 与INI和JSON相比有点笨重
所以最好使用INI格式而不是YAML。使用json好主意
用于加载配置文件
"username" : "root" //in json file
$json = file_get_contents('path/to/file');
$data = json_decode($json);
$data->username; //print root
$data['username'] = 'root';
用于写入配置文件
"username" : "root" //in json file
$json = file_get_contents('path/to/file');
$data = json_decode($json);
$data->username; //print root
$data['username'] = 'root';
if(文件内容('path/to/file',json\u encode($dat))){
回显“配置更新”;
}
如果您在web root中使用此.htaccess,最后一件事是
<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>
要求全部拒绝
全盘否定
如果配置只是一个变量列表(没有嵌套或数组),那么自己制作一个单级YAML解析器不是很容易吗?为什么不使用简单的ini文件?PHP为此内置了函数。这让我想起了前面的一个问题:-将“更快”替换为“更好”。所以在这种情况下,您建议使用YAML?为了允许as用户轻松配置应用程序的某些部分,如数据库、文件位置等,2011年,我认为没有理由不在json中这样做。(增加可读性,如果我们缩进的话)这是一个相当成熟的传统,它有很多优点(在一个典型的web中,你不必特别注意检查访问者,应用程序也不会看到配置),但是