7

我已经将一些网站配置数据存储在一个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');

哪种方法最好?

4

3 回答 3

17

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

  1. PHP 编译器会在加载 config.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 可能还有其他优点,但目前没有想到。

于 2013-07-16T01:57:45.453 回答
2

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

于 2013-07-16T01:52:17.743 回答
2

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

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

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

这是他的人:

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

于 2013-07-16T03:38:45.547 回答