Mar*_*ark 24 php sql configuration configuration-files
我正在尝试确定存储应用程序配置设置的最佳方法.有很多选择.
我见过的大多数应用程序都使用了一个简单的需求和一个包含变量的PHP文件.似乎有更先进的技术.
你用过什么?什么是最有效的?什么是最安全的?
gah*_*ooa 13
我们使用一个被称为Local.php
SCM系统的文件.它包含几个常量或全局变量.例如:
// Local.php
class Setting
{
const URL = 'http://www.foo.com';
const DB_User = 'websmith';
}
Run Code Online (Sandbox Code Playgroud)
它可以简单地通过以下方式引用到任何地方:
Setting::URL
Run Code Online (Sandbox Code Playgroud)
如果您需要在运行时可以写入设置,我建议您使用公共静态变量.
你可以做的最好的事情是可以工作的最简单的事情(php变量)并将其包装在一个类中.这样,您可以在不更改任何客户端代码的情况下更改实现.创建配置类实现的接口,并使客户端代码使用接口方法.如果您以后决定将配置存储在数据库或JSON或其他任何内容中,则可以简单地将现有实现替换为新实现.确保您的配置类是可测试的并编写单元测试.
尝试使用这里描述的技术使用php-arrays配置文件:http://www.dasprids.de/blog/2009/05/08/writing-powerful-and-easy-config-files-with-php-arrays
此方法允许您以这种方式编写应用程序配置:app.config.php
<?php
return array(
'appname' => 'My Application Name',
'database' => array(
'type' => 'mysql',
'host' => 'localhost',
'user' => 'root',
'pass' => 'none',
'db' => 'mydb',
),
);
Run Code Online (Sandbox Code Playgroud)
这种方法是安全的,可由操作码cachers(APC,XCACHE)缓存.
我发现 Zend_Config
这是一个很好的解决方案.您可以从简单数组,INI样式文件或XML文档加载配置.无论您选择哪种,配置对象都是相同的,因此您可以自由切换存储格式.Zend_Config
对象也可以合并,这取决于您的应用程序,这可能是有用的(服务器配置,然后每个站点/安装配置).
与Zend Framework中的大多数(或所有)事物一样,您可以轻松地单独使用Zend_Config
.
考虑到效率,我认为最快的方法是使用数组,因为这需要更少(在这种情况下没有)字符串解析.但是,对于某些人来说,INI/XML格式可能更容易维护.当然,一些缓存会给你两全其美.
此外,使用INI文件Zend_Config
允许您定义彼此继承的配置部分.最常见的用法是继承自"生产"部分的"开发"部分,然后重新定义数据库/调试设置.
至于安全性,将配置文件保留在Web根目录之外是第一步.使其只读并限制访问可以使其更安全; 但是,根据您的托管/服务器配置,您可能会受到限制.
怎么样:
; <?php die('Direct access not allowed ;') ?>
; The above is for security, do not remove
[database]
name = testing
host = localhost
user = root
pass =
[soap]
enableCache = 1
cacheTtl = 30
Run Code Online (Sandbox Code Playgroud)
保存为config.php(或类似的东西,必须有php扩展),然后只需加载:
parse_ini_file('config.php', true);
Run Code Online (Sandbox Code Playgroud)
你可以使用
array_merge_recursive(parse_ini_file('config-default.php', true), parse_ini_file('config.php', true))
Run Code Online (Sandbox Code Playgroud)
将默认配置文件与更具体的配置文件合并.
这里的要点是您可以使用非常易读的ini格式,但仍然可以将您的配置文件放在公共目录中.当您使用浏览器打开文件时,php将首先解析它并给您结果,这将只是";不允许直接访问;".当您直接将文件解析为ini文件时,php die语句将根据ini语法(;)进行注释,因此它不会产生任何影响.
归档时间: |
|
查看次数: |
12811 次 |
最近记录: |