使用 PHP 处理 XML 配置文件
使用 PHP 处理 XML 配置文件
使用 XML 配置文件轻易地配置 PHP 应用程序和对象
级别: 中级
Vikram Vaswani, 创始人, Melonfire
2007 年 11 月 29 日
XML 为应用程序配置文件提供了一种便捷、易用的表达语言。但有时候将这些信息提取到 PHP 脚本中将会面对一个不小的挑战。这正是 XJConf for PHP 包出现的原因:它提供了一种读取 XML 编码信息并直接将其用于配置标量、数组和 PHP 对象这类 PHP 数据结构的 API。本文介绍了这个包,并通过在一些实际应用程序中的应用来示范其用法,包括配置复杂的类树和构建基于 Web 的配置界面。
简介
作为一条通用规则,开发任何稍微复杂的软件时,最好花点时间确定产品的重要配置变量,并将其从标准变量名称空间中取出来放到单独的位置。这样处理后就能形成集中的应用程序配置信息存储库,从而简化在不同环境中工作时对产品的修改。还有助于开发人员熟悉和理解产品成功运行所需要的重要信息。
传统上,配置变量存储在一个(或多个)配置文件中。这些变量常常用 XML 表示,XML 提供了一个灵活的框架允许文档作者使用自定义的标签和标记描述内容。多数情况下,开发人员还需要建立与这些 XML 配置文件交互的用户接口,读取和使用包含的配置数据。
XJConf for PHP 可帮助 PHP 开发人员完成这项任务。这个开源的包提供了一种 API,从配置文件中提取 XML 编码的信息,转化成原生数据结构直接在应用程序中使用。同样地,它也为所有的 PHP 应用程序提供了一种健壮的、易用的部件。
回页首
安装需要的软件
XJConf 包由 Frank Kleine 和 Stephan Schmidt 维护,按照 GNU LGPL 协议在 PHP 社区发布。它需要 PHP 5.0(或更高版本),最简单的安装方法是使用 PEAR 自动安装程序,后者默认情况下包含在 PHP 中。安装只需在 shell 提示符下输入下列命令即可:
shell> pear channel-discover pear.php-tools.net
shell> pear install pat/XJConfForPHP-alpha
PEAR 安装程序将连接到新的通道,下载这个程序包并安装到系统中适当的位置。本文使用的是 XJConf for PHP V. 0.2.0。
手动安装需要访问主页,下载源代码压缩包,手动解压到目标位置。可以在本文的 参考资料 部分找到该程序包的主页以及正在开发版本的链接。需要注意的是手工安装之前必须对 PEAR 程序包的组织结构有所了解。
最后一点要求:XJConf for PHP 需要启用 PHP 的 xmlreader 扩展。PHP 5.1.0 或以上版本默认
相关文档:
为了深入了解PHP,以及更加便利的使用PHP为我们服务,本章节主要介绍PHP的基本语法。
一、从HTML中分离
PHP 的脚本由文件中一对特殊的标记所引起的内容,当解释器分析一个文件时,所有特殊标记外的普通文件,解释器不对其做任何处理,而特殊标记内文件将作为 PHP 代码被解释器分析执行。该运行机制将允许您在 HTML 中嵌入 ......
IPV4 可以看做4个256进制的数字, 可以按常规的进制转换换算成十进制.
如 192.168.1.1 换算成10进制:
192*256*256*256 + 168*256*256+1*256+1
其实计算机更擅长移位和与或运算. 可以改进算法如下.
IP 转长整型
public ipToInt($sIP)
{
$aIP = explode('.',$sIP);
$iIP = ($aIP[0] << 24) | ($aIP[1] ......
PHP 中由于数组和字符串这两种变量类型是如此常用,以至于 PHP 具有两个函数,可以在字符串和数组之间互相进行转换。
$array=explode(separator,$string);
$string=implode(glue,$array);
使用和理解这两个函数的关键之处是分隔符(separator)和胶合符(glue)关系。当把一个数组转换成一个字符串时,将会� ......
比较:
1. DTD
a. 最早的XML Contraint
b. 由W3C定义
C. 非常简单
2. XML Schema
a. 目前应用最广的XML Contraint
b. 由W3C定义
c. 很灵活,但非常复杂
3. Relax NG
a. 是个野孩子,不是由W3C定义
b. 非常非常简单直观
c. 对于需要频繁定义Contraint的Engineer非常合适
相互转化:
1. XML Document -> DTD ......
1. 对递归的不良支持
递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP 4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限 ......