从JSON或PHP文件加载网站配置


Load website configuration from JSON or PHP file?

我在config.json文件中存储了一些网站配置数据,包括数据库连接参数和路由等。类似这样的东西:

{
    "production" : { ... },
    "test" : { ... },
    "development" : { ... }
}

内容加载有:

$config = json_decode(file_get_contents('config'), true);

然而,在检查一些框架时,我发现PHP脚本直接用于配置存储:

<?php
return array(
    'production' => array( ... ),
    'test' => array( ... ),
    'development' => array( ... )
);
<?php $config = (require 'config.php');

哪种方法是最好的?

使用config.php方法有几个优点:

  1. 当加载config.PHP文件时,PHP编译器会很快告诉您是否在该文件中有语法错误,而您必须等到解析JSON文件后才能发现任何错误
  2. PHP文件的加载速度将比解析第二个和后续页面加载的JSON文件更快,因为脚本将由web服务器缓存(如果支持并启用缓存)
  3. 安全漏洞的可能性较小。正如Michael Berkowski在评论中指出的那样,如果你没有将JSON文件存储在文档根目录之外或正确配置web服务器设置,web客户端将能够下载你的JSON文件并获得你的数据库用户名&密码并直接访问您的数据库。相比之下,如果web服务器被正确配置为通过php脚本引擎处理*.php文件,则即使它位于文档根目录下,客户端也无法直接下载config.php

不确定使用JSON而不是config.php是否真的有任何好处,除非您有用不同语言编写的多个应用程序(例如perl、python和php),它们都需要访问相同的共享配置信息。JSON可能还有其他优点,但目前还没有想到。

从PHP配置文件加载通常更快,而且它还支持更多功能,如闭包和字节码缓存(如果启用)。

请注意,PHP有一个特殊的功能可以快速加载.ini文件,该文件可以解析您的配置文件

如中所述:PHP parse_ini_file()性能?

它是加载配置文件的较快方法之一。

这是它的人:

http://php.net/manual/en/function.parse-ini-file.php