我应该在PHP应用程序中对配置文件使用YAML吗?

jdg4fx2g  于 2023-10-15  发布在  PHP
关注(0)|答案(6)|浏览(148)

我目前正在编写自己的PHP框架(为了好玩,而不是为了使命关键的东西),我试图添加功能,用户可以设置框架应该使用的数据库(一个主数据库,然后可能有一个或两个后备-如sqlite),某些文件的位置等。我应该使用YAML吗?是否有更好的方法或标准做法?

我的想法

  1. YAML在可读性方面是用户(非技术)友好的
    1.为了使我的Framework不需要非标准的PHP库,我必须使用类似Symfony YAML的东西来解析文件。
  2. Symfony不是要离开YAML了吗?
    1.我可以使用一个充满变量的PHP文件,但这会使框架的设置对用户不那么透明。

更新

我正在整理这个问题,使它更具建设性,并纳入我得到的一些答案。

所有问题

  1. YAML与其他方法(如XML或INI文件设置)相比有什么优势?
    1.关于何时使用YAML而不是其他方法,或者反之亦然,有什么好的经验法则?
3xiyfsfu

3xiyfsfu1#

个人经验。YAML似乎是一个很棒的想法,我喜欢它和它的简单性。于是,我开始投入时间:能够用一种语言阅读并用另一种语言写作的概念非常诱人,但是......简而言之,这只是一种幻想,没有事实根据。

YAML的每个实现都与其他实现有很大的不同

  • 数组,自动序列化的一个,有时不能读取另一个。
  • 支持交叉引用,但它们的实现非常粗略。

引用是强大的,但是:

  • 它们对于一些核心应用程序来说是相当有限的。
  • 对于大多数基于YAML的低端项目来说,它们是一种“矫枉过正”。

因此,它们经常被大多数解析器忽略,* 并被忽略。
总而言之,标准没有很好地设定。
有一些核心概念很好,很简单,但实际的标准文档充满了关于**功能的细节,大多数人不想使用这些功能,实现起来很困难,也很昂贵。
没有 *

使用替代

*JSON,如果您将 * 跨语言数据交换语言 * 和 * 小冗余 * 方面视为最高优先级
*INI如果你看重 * 性能和向后兼容性 在PHP上 *,因为parse_ini_file()很快,而且从那以后...总是)和 * 可读性/人类编辑性 *,而不是。

azpvetkf

azpvetkf2#

我个人的偏好是一个基于PHP的配置文件。
我知道php,所以对我来说,学习yaml只是为了配置文件是额外的工作,当你可以有一个简单的配置文件,像这样,这在本质上是没有困难的yaml,并不需要一个特殊的解释器库,只是包括('php'),你走了

$config = array(
  'database' => array(
      'default' => array(
         'name' => 'dbname',
         'host' => 'localhost',
         'user' => 'username',
         'pass' => 'password'
      )
   )
);

然后你可以像这样引用配置设置

$host = $config['database']['default']['host'];

下一步是保持配置文件简单,存储所需的最小量的配置数据,然后使用数据库存储其余的,并为最终用户提供管理屏幕以更改应用程序中的设置。

ohtdti5x

ohtdti5x3#

我对配置文件格式进行了更多的挖掘,并发现了YAML格式的有趣事实。
主要是它没有什么缺点
1)它涉及安装和配置额外的PHP库,因为YAML模块默认情况下不会出现,或者必须与Symphony框架解耦并使用它。
2)读写性能是所有配置技术中最差的,如果与INI,XML,JSON相比。与INI文件http://konrness.com/php5/zend_config-benchmark-json-array-ini-xml-yaml/相比,
3)可读性不是很好,与INI和XML格式相比。当它变得很大,然后很难阅读和管理与人道的眼睛。
4)与INI和JSON相比有点大。
所以最好使用INI格式而不是YAML。

omjgkv6w

omjgkv6w4#

如果你正在编写一个框架,那么是的。你将不得不在你的部分做更多的工作,但框架的目标是让开发应用程序的人更容易。
Symfony不是要离开YAML了吗?
不,Symony2几乎完全由YAML配置。

z4bn682m

z4bn682m5#

使用JSON好主意
用于加载配置文件

"username" : "root" //in json file 

 $json = file_get_contents('path/to/file');
 $data = json_decode($json);
 $data->username; //print root

用于写入配置文件

$data['username'] = 'root';

if (file_put_contents('path/to/file', json_encode($dat))) { echo "<h4 class='alert alert-success'>config updated</h4>"; }
最后一件事,如果你在网络根使用此.htaccess

<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>
ippsafx7

ippsafx76#

我通常做的是创建一个XML文件,然后创建一个非依赖的前端来修改XML文件中的设置。

相关问题