Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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应用程序中对配置文件使用YAML吗?_Php_Yaml - Fatal编程技术网

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

我应该在PHP应用程序中对配置文件使用YAML吗?,php,yaml,Php,Yaml,我目前正在编写我自己的PHP框架(用于kicks,而不是用于关键任务的东西),我正在尝试添加功能,用户可以在其中设置框架应该使用的数据库(一个主数据库,然后可能是一个或两个回退,如sqlite),某些文件的位置,等等。我应该使用YAML吗?是否有更好的方法或标准做法 我的想法 YAML在可读性方面对用户(非技术)友好 为了使我的框架不需要非标准的PHP库,我必须使用类似的方法来解析文件 Symfony不是要离开YAML吗 我可以使用一个充满变量的PHP文件,但这会使框架的设置对用户不那么透明 更

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

我的想法

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

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

    我的总体问题

  • YAML与XML甚至INI文件设置等其他方法相比有哪些优势
  • 关于何时使用YAML而不是其他方法,或者何时使用YAML而不是其他方法,什么是好的经验法则

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

    如果您正在编写一个框架,那么是的。您必须完成更多的工作,但是框架的目标是让开发应用程序的人更容易

    Symfony不是要离开YAML吗

    否,Symony2几乎完全由YAML配置。

    否 个人经历。YAML似乎是一个很棒的想法,我喜欢它和它的简单。然后我开始在这上面投入时间:能够用一种语言阅读和用另一种语言写作的概念非常诱人,但是。。。简言之,它原来只是一种幻觉,没有事实根据

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

    • 一个自动序列化的数组有时不能被另一个读取

    • 支持交叉引用,但它们的实现非常粗略

      引用功能强大,但:

      • 对于某些硬核应用程序来说,它们非常有限
      • 对于大多数基于YAML的低端项目来说,它们都是一种过激行为

      因此,大多数解析器经常会忽略它们,并在它们的基础上出错

    总的来说,这个标准制定得不好

    有些核心概念很好,也很简单,但实际的标准文档中有很多关于功能的细节,大多数人都不想使用这些功能,而且实现起来既困难又昂贵

    与DOM(DOM级别1、DOM级别2等)不同,没有兼容性级别的区别,因此每个解析器实现者都会在自己能够承受的范围内实现自己想要实现的,然后放弃它,很难区分哪些是有效的,哪些是无效的

    使用替代品
    • JSON如果您将跨语言数据交换语言小冗余方面作为最高优先级

    • INI如果您重视性能和向后兼容性(在PHP上,因为
      parse_INI_file()
      是快速的,而且从那时起…总是如此)和人类的可读性/可编辑性


    我个人喜欢基于PHP的配置文件

    我知道php,所以对我来说学习yaml只是为了配置文件是额外的工作 当您可以有这样一个简单的配置文件时,本质上对yaml来说并不难,并且不需要特殊的解释器库,只需包含('config.php'),您就可以离开了

    $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中,你不必特别注意检查访问者,应用程序也不会看到配置),但是