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

Tas*_*sta 7 php json

我已经将一些网站配置数据存储在一个config.json文件中,包括数据库连接参数和路由.像这样的东西:

{
    "production" : { ... },
    "test" : { ... },
    "development" : { ... }
}
Run Code Online (Sandbox Code Playgroud)

内容加载:

$config = json_decode(file_get_contents('config'), true);
Run Code Online (Sandbox Code Playgroud)

但是,检查一些框架,我看到PHP脚本直接用于配置存储:

<?php
return array(
    'production' => array( ... ),
    'test' => array( ... ),
    'development' => array( ... )
);
Run Code Online (Sandbox Code Playgroud)
<?php $config = (require 'config.php');
Run Code Online (Sandbox Code Playgroud)

哪种方法最好?

lin*_*erd 14

使用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文件也不能在公用文件夹中. (2认同)
  • @tassoevan - 添加了一些说明,希望能更好地解释您在评论中提出的问题. (2认同)