my_config.ini vs my_config.php

my_config.ini vs my_config.php,php,configuration-files,ini,Php,Configuration Files,Ini,在工作中,我们使用一个.ini文件来设置变量,然后再调用框架的其余部分(我想它会 function getConfigVars(){ //read my_config.ini file .... //call framework } 我一直想知道这样做是否有好处 在我看来,您必须编写访问规则来阻止人们从web上查看它,php必须解析并理解它 那么,为什么要使用my_config.ini而不是my_config.php呢?设置后,似乎没有人应该触摸它,而且调用变量并让ID

在工作中,我们使用一个.ini文件来设置变量,然后再调用框架的其余部分(我想它会

function getConfigVars(){
    //read my_config.ini file
    ....
    //call framework
}
我一直想知道这样做是否有好处

在我看来,您必须编写访问规则来阻止人们从web上查看它,php必须解析并理解它


那么,为什么要使用my_config.ini而不是my_config.php呢?设置后,似乎没有人应该触摸它,而且调用变量并让IDE自动完成文本似乎更方便,无论您在哪里使用ini变量/解析错误。

非程序员可能更容易修改fy配置变量…如果您的工作场所需要的话

我发现仔细放置
可以阻止它显示,而parse_ini_file()仍将从文件中获取相关数据


不过,保护它的最佳方法是将其置于docroot之上,并在服务器设置中拒绝对*.ini的访问。

可以肯定,您的问题提出了一个公平的观点

以下几点有利于
.ini
文件:

  • 将该文件与另一种语言一起使用。如果您想要一个Perl、Python、Ruby等脚本,请使用该语言执行一些特别容易的操作,并且需要访问项目设置,那么如果您将设置存储在PHP文件中,您可能会运气不佳

  • 人工编辑数据。尽管您在问题中忽略了它,但不管是否有意图,很可能最终有人会插入其中,而它可能不是技术人员。INI格式比PHP代码要安全得多,即使它只是一堆变量声明

  • 更新设置。我认为创建一个新的INI文件比编写一个PHP文件要容易得多。不过,这很主观,但值得一提

  • 设置变量之间的关系。使用INI文件为设置提供一个层次结构是相当容易/直观的。虽然使用PHP也可以做到这一点,但如果您试图使用深度嵌套的关联数组来存储信息,它就不那么整洁,而且会变得难看

除此之外,“必须保护它不受web访问”这一对INI的冲击在大多数情况下都是不相关的,因为大多数PHP项目(至少是我参与的那些项目)在远离根文件夹的地方保存相当多的代码,设置通常会放在那里。

包含一个配置解析,用于解析以ini格式()编写的文件,听起来这就是您正在使用的

配置文件不应位于文档根目录中,如果它不在文档根目录中,则不需要重写规则,因为没有人可以访问它

INI格式专门用于提供配置数据键的层次结构和配置数据节之间的继承。通过使用点或句点字符(.)分隔键来支持配置数据层次结构。节可以通过在节名称后面加冒号(:)和要从中继承数据的节的名称来扩展或继承另一节

从第页开始

Zend Framework使用它允许您拥有多个配置参数,一个用于暂存,一个用于开发,一个用于生产。这还允许轻松设置生产数据库设置,以及用于开发和具有两个非常不同的设置。ini文件中设置的到包含所在位置的不同路径。这使代码从开发转移到生产变得更加容易,因为知道开发中的所有内容都将立即关闭

当然,这在PHP脚本中是可能的,但是它需要对各种配置变量进行更多的解析,以及进行if/then检查,而使用parse_ini_file()可以自动完成所有这些

其他答案也已经指出,非程序员可能需要更改变量或网站上设置为配置变量的内容(例如,网站布局中使用的网站标题)。INI文件很容易理解和阅读,即使对于以前从未编程过的人来说也是如此

我目前工作的网站示例:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.db.adapter       = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users.db"

resources.view[] =

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-testing.db"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-dev.db

对于那些想知道使用INI文件(必须解析)和PHP文件(可以由PHP缓存)之间是否存在性能差异的人来说,使用多个数据集来运行代码非常容易字体是的,有差异,但差异太小,不重要

我的基准场景是一个包含20个键/值对的
config.ini
文件和一个包含20个键/值对的
config.php
文件,这些键/值对都是按定义编写的。在Ubuntu Linux 13.04上,php版本是5.4.9

key1 = value1
...
key20 = value20
vs

APC PHP缓存的结果:

ini: Requests per second:    2660.89 [#/sec] (mean)
php: Requests per second:    2642.28 [#/sec] (mean)
ini: Requests per second:    3294.47 [#/sec] (mean)
php: Requests per second:    3307.89 [#/sec] (mean)

我多次运行测试,当然每次测试的数字都会有所不同,但一致的意见是:
config.ini
在不使用PHP缓存的情况下要快一点,
config.PHP
在使用PHP缓存的情况下要快一点。但是差异太小了,不应该基于性能来决定。

已经有了n其他几个与此问题类似的问题,例如,这里有一些相关信息:我希望我们有多个配置…我总是因为不小心用root/toor提交配置文件而遇到麻烦,因为它比在本地创建100个不同的数据库用户更方便。正如您所看到的,使用INI配置文件可以轻松地继承,但同时允许您根据当前
<?php
require_once "config.php";
ini: Requests per second:    2660.89 [#/sec] (mean)
php: Requests per second:    2642.28 [#/sec] (mean)
ini: Requests per second:    3294.47 [#/sec] (mean)
php: Requests per second:    3307.89 [#/sec] (mean)