您现在的位置:
软界网
>
技术中心
>
WEB开发
>
PHP
> 技术显示
操作系统
|
办公软件
|
实用工具
|
网络管理
|
软件开发
|
WEB开发
|
软件工程
|
数据库
|
设计在线
|
信息安全
|
行业信息化
|
管理信息化
|
移动开发
构建可配置PHP应用程序的正确方式
2006-11-20 7:00:00 网友评论 阅读次数
点此评论
推荐:
让你的PHP快马加鞭 PHP程序优化探秘
本文举例说明了创建可配置 PHP 应用
程序
的几种方法。文中也探讨了应用程序中理想的配置点,并在应用程序过分可配置和过分封闭之间寻求一个平衡点。
如果计划让其他人或公司可以使用您的 PHP 应用程序,需要确保该程序是可配置的。至少,要允许用户以一种
安全
的方式设置数据库登录及密码,从而使其中的材料不会对外公开。
本文展示了几种用于存储配置设置及编辑这些设置的技术。另外,文中也为哪些元素需要设为可配置以及如何避免陷入配置过度或者配置不足的困境提供了指导。
使用 INI 文件进行配置
PHP 内建了对配置文件的支持。这是通过 php.ini 文件这样的初始化文件(INI)机制实现的,在 php.ini 文件中定义了数据库连接超时或会话如何存储等常量。如果愿意的话,可以在这个 php.ini 文件中为应用程序定制配置。为了说明,我将下列代码行添加到 php.ini 文件中。
myapptempdir=foo
然后,我编写了一个小 PHP 脚本来读取这个配置项,如清单 1 所示。
清单 1. ini1.php
<?php
function get_template_directory()
{
$v = get_cfg_var( "myapptempdir" );
return ( $v == null ) ? "tempdir" : $v;
}
echo( get_template_directory()."\n" );
?>
当在命令行中运行这段代码时,得到如下结果:
% php ini1.php
foo
%
太棒了。但为什么不能用标准的 INI 函数来获取 myapptempdir 配置项的值呢?我研究了一下,发现在大多数情况下,定制配置项不能使用这些方法来获取。然而,使用 get_cfg_var 函数却是可以访问的。
为使这个方法更加简单,将对变量的访问封装在第二个函数中,该函数使用配置键名及一个缺省值作为参数,如下所示。
清单 2. ini2.php
function get_ini_value( $n, $dv )
{
$c = get_cfg_var( $n );
return ( $c == null ) ? $dv : $c;
}
function get_template_directory()
{
return get_ini_value( "myapptempdir", "tempdir" );
}
这是对如何访问 INI 文件的一个很好的概括,所以,如果要使用一个不同的机制或将这个 INI 文件存储到其他位置,就不需要为更改大量的函数而大费周折。
我不推荐使用 INI 文件作为应用程序的配置,这有两个理由。首先,虽然这样做较容易读取 INI 文件,但却几乎不可能安全地写 INI 文件。所以这样做只适合于只读配置项。第二,php.ini 文件在服务器的所有应用程序上共享,所以我认为特定于应用程序的配置项不应该写在该文件中。
需要对 INI 文件了解什么呢?最重要的是如何重置 include 路径来添加配置项,如下所示。
清单 3. ini3.php
<?php
echo( ini_get("include_path")."\n" );
ini_set("include_path",
ini_get("include_path").":./mylib" );
echo( ini_get("include_path")."\n" );
?>
在本例中,我将我的本地 mylib 目录添加到了 include 路径中,所以能够从该目录中 require PHP 文件,而不需要将该路径添加到 require 语句中。
PHP 中的配置
通常对于在 INI 文件中存储配置条目的一个替代办法是使用一个简单的 PHP 脚本来保持数据。如下是一个样例。
清单 4. config.php
<?php
# Specify the location of the temporary directory
#
$TEMPLATE_DIRECTORY = "tempdir";
?>
使用该常量的代码如下所示。
清单 5. php.php
<?php
require_once 'config.php';
function get_template_directory()
{
global $TEMPLATE_DIRECTORY;
return $TEMPLATE_DIRECTORY;
}
echo( get_template_directory()."\n" );
?>
该代码首先包含配置文件(config.php),接着就可以直接使用这些常量了。
使用这项技术有很多优势。首先,如果某些人仅仅浏览 config.php 文件,该页面是空白的。所以可以将 config.php 放到相同的文件中,并作为 Web 应用程序的根。第二,在任何编辑器中都可编辑,并且在一些编辑器中甚至具备语法着色及语法检查功能。
这项技术的缺点是,这是一个像 INI 文件一样的只读技术。将数据从此文件中提取出来是轻而易举的,但在该 PHP 文件中调整数据却很困难,在一些情况下甚至是不可能的。
下面的替代方法显示了如何编写在本质上既可读又可写的配置系统。
共4页。
1
2
3
4
:
相关文章
·
PHP大潮将至 PHP近年发展分析
·
小荷才露尖尖角 中国的PHP社群介绍
·
从草根到大腕 PHP技术发展历程
·
基于PHP的AJAX技术实现文件异步上传
·
PHP对战ASP:这还值得讨论吗?
·
7种流行PHP集成开发工具(IDE)的比较
最新更新
·
PHP 6.0发布前新特性全面展望
·
ASP.NET 2.0的URL映射的实现方法
·
高性能、高弹性JSP和Servlet性能优化
·
Rails应用优化指南
·
Asp.net中防止用户多次登录的方法
·
ASP.NET 与 Ajax 的实现方式
关注此文读者还看过
·
利用PHP制作简单的内容采集器
·
升级PHP5的理由:PHP4和PHP5性能对比
·
在PHP中全面阻止SQL注入式攻击之二
·
在PHP中全面阻止SQL注入式攻击之三
·
在PHP中全面阻止SQL注入式攻击之一
·
草根挑战豪门 PHPer要为自己正名
·
传奇的诞生 PHP三位创始人简介
·
小荷才露尖尖角 中国的PHP社群介绍
·
PHP大潮将至 PHP近年发展分析
网友关注
最新上市
编辑推荐
综合布线
联想 IdeaPad U110
联想 IdeaPad Y510AT8100-P(TV TUNER)
联想 IdeaPad Y510GT5550
联想 IdeaPad Y510A-ST(TV TUNER)
联想 IdeaPad Y510A-UT
联想 IdeaPad Y510AT5550
联想 IdeaPad Y710-UT(TV TUNER)
联想 IdeaPad Y510AT5450-P(红)
联想 IdeaPad Y710-ST(TV TUNER)
联想 IdeaPad Y510AT5450-P(黑)
联想 IdeaPad Y710AT5550-P(TV TUNER)
联想 IdeaPad Y710AX7900-L(TV TUNER)
联想 IdeaPad Y510AT5450-P(白)
联想 IdeaPad Y510AT2330
联想 ideaPad Y410AT8300
文章阅读排行
周排行
月排行
公司技术管理角度看C++游戏程序员发展
从玩扑克到软件开发
Java实现各种排序 经典大放送
程序员V.S.编程语言:你上“贼船”了吗?
5个理由:红帽为什么要放弃桌面Linux
致Delphi终将逝去的青春
透过VB看开发语言未来发展方向
基于Facebook app平台上的生态链
IBM向中国捐助Sahana赈灾管理系统
用PHP for Microsoft AJAX Library增强PHP编程
用C#2.0实现网络蜘蛛(WebSpider)
JavaScript进阶专题
地震软件的过去、现在和未来
Google美丽办公室背后的危机(图)?
[专家茶室]从VB的角度看未来编程语言的发展
Facebook宣布放弃Java支持
从玩扑克到软件开发
公司技术管理角度看C++游戏程序员发展
打工皇帝唐骏:在微软没有人敢说比我更勤奋
地震无情人有情,IBM在你身边
.NET Framework革命性的解决方案软件系统平台
.NET开发资源站点和部分优秀.NET开源项目
谈谈C/C++和.NET以后的走向
用C#2.0实现网络蜘蛛(WebSpider)
JavaScript快速入门专题
LOTUS技术学习专题
JavaScript进阶专题
JAVA在移动开发中的应用技术专题
地震软件的过去、现在和未来
Google美丽办公室背后的危机(图)?
热点推荐
珊瑚虫QQ侵权事件追踪专题报道
2007第二届中国共享软件英雄榜隆重揭榜
IBM Lotus Symphony免费办公软件轰动面世
Vista系统群乐 分享大家的使用心得
欢迎订阅天极网RSS聚合资讯:
http://www.yesky.com/index.xml