在工作中,我们使用.ini文件在调用框架的其余部分之前设置变量(我认为它会
function getConfigVars(){ //read my_config.ini file .... //call framework }
而且我一直想知道这样做是否有好处.
在我看来,你必须编写访问规则,以阻止人们从网上查看它,PHP必须解析它并理解它.
那么,为什么要使用my_config.ini而不是my_config.php?它不像任何人在设置之后应该触摸它,只是调用变量并且能够让IDE自动完成文本,无论你在哪里使用ini变量/解析错误,它都会更方便.
对于那些提出这个问题的人,因为他们想知道在使用必须解析的INI文件和简单包含的PHP文件(并且可以通过PHP缓存)之间是否存在任何性能差异:是的,有差异但是它们太小了,它并不重要.
我的基准测试场景是一个config.ini
包含20个键/值对的config.php
文件,以及一个具有相同的20个键/值对的文件.在Ubuntu Linux 13.04上PHP版本是5.4.9.
key1 = value1 ... key20 = value20
与
两个测试脚本,包括配置:
与
我测试了性能
ab -c 25 -n 10000
.没有PHP缓存的结果:
ini: Requests per second: 2660.89 [#/sec] (mean) php: Requests per second: 2642.28 [#/sec] (mean)APC PHP缓存的结果:
ini: Requests per second: 3294.47 [#/sec] (mean) php: Requests per second: 3307.89 [#/sec] (mean)我多次运行测试,自然数字每次都会变化,但共识是:
config.ini
当没有使用PHP缓存时,config.php
速度会快一点,使用PHP缓存时速度会快一点.但差异很小,决定不应该基于绩效.
2> Paolo Bergan..:你的问题提出了一个公平的观点,当然.
有几点支持
.ini
文件:
使用其他语言的文件.如果您曾经想要使用Perl,Python,Ruby等脚本做一些使用该语言特别容易并且需要访问项目设置的东西,那么如果您将设置存储在PHP文件中,那将是不合时宜的.
人工编辑数据.虽然你在你的问题中解雇了它,但意图是否有可能最终有人可能会在那里戳,而且可能不是技术人员.INI格式比PHP代码要简单得多,即使它只是一堆变量声明
更新设置.我认为创建一个新的INI文件比编写PHP文件要容易得多.然而,这是非常主观的,但值得一提.
设定变量之间的关系.使用INI文件为您的设置提供层次结构非常容易/直观.虽然使用PHP也可以实现这一点,但如果您尝试使用深层嵌套的关联数组来存储信息,那么它就不那么整洁了.
除此之外,在大多数情况下,对INI"必须保护它免受Web访问"的冲击并不重要,因为大多数PHP项目(至少是我所属的那些项目)从根目录中保存了大量代码文件夹,设置通常去那里.
3> X-Istence..:在Zend框架包含了分析这都写在INI格式(文件配置解析Zend_Config_Ini的),这听起来像这是你使用的是什么.
配置文件不应位于文档根目录中,如果它不在您的文档根目录中,则不需要重写规则,因为无论如何都没有人可以访问它.
INI格式专门用于提供配置数据键层次结构和配置数据段之间的继承.通过用点或句点字符(.)分隔键来支持配置数据层次结构.部分可以通过使用冒号字符(:)跟随部分名称以及要从中继承数据的部分的名称来扩展或继承其他部分.
来自Zend_Config_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它使得为代码可以运行的各种环境拥有多个数据集非常容易.