多数大学生出来选择的工作和专业无关
首页 > 专业知识

使用PHP处理XML配置文件

时间:2018-03-02 17:34:27 [来源]:郑州PHP培训学校

   使用PHP处理XML配置文件

  作为一条通用规则,开发任何稍微复杂的软件时,最好花点时间确定产品的重要配置变量,并将其从标准变量名称空间中取出来放到单独的位置。这样处理后就能形成集中的应用程序配置信息存储库,从而简化在不同环境中工作时对产品的修改。还有助于开发人员熟悉和理解产品成功运行所需要的重要信息。
  传统上,配置变量存储在一个(或多个)配置文件中。这些变量常常用 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.netshell> pear install pat/XJConfForPHP-alphaPEAR 安装程序将连接到新的通道,下载这个程序包并安装到系统中适当的位置。本文使用的是 XJConf for PHP V. 0.2.0。
  手动安装需要访问主页,下载源代码压缩包,手动解压到目标位置。可以在本文的 参考资料 部分找到该程序包的主页以及正在开发版本的链接。需要注意的是手工安装之前必须对 PEAR 程序包的组织结构有所了解。
  最后一点要求:XJConf for PHP 需要启用 PHP 的 xmlreader 扩展。PHP 5.1.0 或以上版本默认启用该扩展。老版本 PHP 用户可从 PHP 手册(链接见 参考资料)的适当章节获取详细信息和激活方法。
  本文假设您使用过 PHP 和 XML,熟悉 PHP 的简单和复杂数据类型。假设对一般 OOP 概念和 PHP 5 的类模型有一定的了解,对 PHP 文档对象模型(DOM)扩展生成 XML 树也有所了解。
  理解基本用法
  XJConf 为 PHP 应用程序开发人员提供了一个 API,可以读取 XML 格式配置文件并转化成原生 PHP 数据类型或自定义对象。然后即可按照通常的方式在 PHP 脚本中使用这些类型或对象。任何基于 XJConf 的程序都包括三部分:
  XML 格式的配置文件
  解析和提取配置文件数据的 PHP 脚本
  将配置文件中的元素映射到原生 PHP 结构的定义文件最好用一个例子来说明三者之间的联系。清单 1 显示了关于宠物猫的配置文件:
  清单 1. XML 配置文件(cat.xml)
  <?xml version='1.0'?>
  <cat>
  <name>Martha</name>
  <age>4</age>
  <breed>Siamese</breed>
  </cat>
  假设需要将这些配置值读入 PHP 应用程序。首先要创建一个定义文件,将 清单 1 中的每个元素映到一种 PHP 原生数据类型。清单 2 给出了一个例子:
  清单 2. XJConf 定义文件(defs.xml)
  <defines>
  <tag name="name" type="string"/>
  <tag name="breed" type="string"/>
  <tag name="age" type="integer"/>
  </defines>
  先研究一下定义文件的结构,因为理解该文件对后面所有的例子至关重要。外层的 <defines> 元素包含一系列 <tag> 元素,分别代表 XML 配置文件中的一个元素。每个 <tag> 必须至少具有 name 和 type 属性。name 属性指定配置文件中的元素名,type 属性则指定对应的 PHP 数据类型。常见的基本类型有 string、integer 和 boolean,不过,后面将看到还能将元素映射为数组或自定义类。
 
  使用PHP解析RDDL文档
  如果曾经使用过 XML,应该知道名称空间 通过与特定 URI 关联来限定 XML 元素名称,从而避免同名元素冲突。但通常仅仅一个 URI 还不够,实际上我们需要一种办法使用多种资源来描述名称空间,包括 DTD、XML 模式、XSL 样式表和软件文档。
  于是资源目录描述语言 RDDL 登台亮相了。正如这种语言的官方网站所说,RDDL “提供了关于一些目标的信息包……目标是 XML 名称空间”(请参阅 参考资料)。RDDL 允许文档作者为用户提供关于特定资源的更多信息。帮助 PHP 开发人员利用这些信息的是 XML_RDDL,PHP Extension and Application Repository (PEAR) 提供的一个包。XML_RDDL 包提供了从 RDDL 文件中提取各种资源信息并在 PHP 应用程序中使用的 API。从而为 PHP/RDDL 应用程序提供了一种健壮、简单易用的构件。
  安装
  XML_RDDL 包由 Stephan Schmidt 维护,采用 PHP 许可证在 PHP 社区发布。最简单的安装办法是用自动化的 PEAR 安装程序,应该包含在默认的 PHP 安装包中。安装只需在 shell 提示符下输入下列命令:
  shell> pear install XML_RDDL
  PEAR 安装程序连接到 PEAR 包服务器并下载程序包,然后安装到系统的适当位置。本技巧使用的是 XML_RDDL V 0.9。
  如果手工安装,可以访问主页并下源代码压缩包,然后手工解压到指定位置。需要注意的是手工安装必须对 PEAR 程序包的组织结构有所了解。
  XML_RDDL 还需要另一个 PEAR 包,即 XML_Parser 包。可以按照上述方法使用 PEAR 自动安装程序安装它,也可在本文 参考资料 部分找到包的链接。
  理解 RDDL 描述符
  首先必须对 RDDL 有所了解。清单 1 中的例子说明了 RDDL 的用法:
  RDDL 文档就是一般的 XHTML 文档,只不过增加了 <resource> 元素,用于描述文档中引用的资源。这个 <resource> 元素用 XLink 修饰,包括描述资源标题、目标、角色和用途的属性。上述文档列出了多种资源:包括 DTD、XML Schema、XHTML 文档,还有两个 MPEG 媒体文件。
  <resource> 的属性中,title 和 href 很简单,分别提供了字符串描述和链接目标的 URL。<resource> 元素的 role 和 arcrole 属性稍微复杂一点。role 属性描述了资源的性质,必须是指向资源名称空间或者引用资源 MIME 类型的 URI,http://www.rddl.org/natures/ 列出了常见的性质。arcrole 属性指定了资源的用途,参见 http://www.rddl.org/purposes/。
  上述内容对于 RDDL 1.0 来说是对的。但是 2004 年 1 月发布了 RDDL 规范的更新草案 RDDL 2.0,取消了 <resource> 元素及其属性。该规范建议使用新属性 nature 和 purpose 将 RDDL 信息内嵌在标准 XHTML <a> 元素中,这两个属性相当于原来 <resource> 元素中 role 和 arcrole 属性。但是,XML_RDDL 包不支持 RDDL 2.0,因此本文中的例子仅适用于 RDDL 1.0。
  使用 PHP 访问 RDDL 信息
  得到包含 RDDL 资源定义的 XHTML 文档之后,使用 XML_RDDL 访问其中的各类信息很简单。清单 2 示范了使用 PHP 从 XHTML 文档中检索全部 RDDL 资源的过程:
  清单 2. 使用 PHP 解析 RDDL 数据
  <?php
  // include class file
  include 'XML/RDDL.php';
  // create RDDL parser
  // parse RDDL file
  $rddl = new XML_RDDL();
  $rddl->parseRDDL('example.html');
  // print array of resources
  print_r($rddl->getAllResources());
  ?>
 
  用PHP编程语言开发动态WAP页面
  作为未来网络通讯的主导,WAP程序的开发已日趋热门。相信通过本文的阅读,能使开发者对使用PHP进行WAP开发有一个初步的印象,希望广大读者能在本文的基础上,参考WML语言,开发出更加强大的WAP应用程序。
  AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验WAP(无线通讯协议)是在数字移动电话、个人手持设备(PDA等)及计算机之间进行通讯的开放性全球标准协议。随着无线通讯的不断发展,静态的WAP页面在很多方面已经不能满足用户个性化的要求,因此开发者可以在WAP服务器端使用诸如PHP等语言产生动态的WML页面,来满足用户的需要。
  WAP的应用结构非常类似于Internet,一个典型的WAP应用请求步骤描述如下:
  1. 具有WAP用户代理功能的移动终端(如WAP手机),通过内部运行的微浏览器向某一网站发送WAP服务请求。该请求先由WAP网关截获,对信息内容进行编码压缩,以减少网络数据流量,同时根据需要将WAP协议转换成HTTP协议。
  2. 协议将处理后的请求转送到相应WAP服务器。在WAP服务器端,根据页面扩展名等属性,被请求的页面直接或由服务器端脚本解释后输出,再经过网关传回给用户。
  从上述的WAP应用流程可以发现,生成动态WAP页面与动态产生Web网页的过程非常相似。但是由于WAP应用使用的WML语言来源于语法严格的XML,因此要求输出的格式必须按WAP网页的规范输出。同时,由于WAP协议的应用范围及移动客户端的软、硬件配置等局限性,对每次输出的页面的大小、图像的格式及容量都有一定限制。本文笔者将以PHP语言为例,和广大网络程序开发爱好者共同探讨动态输出WAP页面的方法和应用。
  输出简单的动态WAP页面
  由于生成WAP页面的过程和生成一般的Web页面非常类似,笔者通过一个最简单的WAP页面的例子来介绍。不过提醒一句:由于需要PHP解释器来解释该程序并输出WAP页面,因此所有类似的程序应以“php”为扩展名哦。
  该实例可以在WAP手机模拟器中浏览,输出一句经典的“Hello WAP”语句,但是在普通的网络浏览器中是无法识别的,原因很简单,在程序开头声明了该输出文档为WML类型,只有WAP设备能够识别并解释。不过又要提醒一句:常见的HTML语言对规范性要求不严,大多数浏览器能“宽容”地接受其中的编写错误,但是WML的规范相当严格,任何的错误都可能导致无法输出所需的页面。
 

上一篇:PHP基本语法入门指令分隔符和注释

下一篇:教你在PHP中使用全局变量