在phing(以及其他的构建系统)背后的思想是评估一系列相关性,然后执行一系列PHP类去正确的安装和配置一个应用系统。构建过程用一个简单的XML配置文件控制。Out of the box, phing内置可以执行一系列替换(比如:在你的开发版本和产品版本间改变include路径)、执行SQL语句、移动和复制文件、运行外部脚本等等。通过扩展包含在发行包中的“task”类,你也可以创造自己的定制任务。
对任何需要在超过一台服务器上部署大型PHP应用的人来世,Phing是一个无价之宝。同时我发现它对简单的PHP脚本也是很有用的。
Phing源自Binarycloud的一个子项目.Binaryclound是一个高度工程化的框架,为了在企业环境中使用而设计.Binarycloud广泛使用XML来存储关于项目的元数据(配置,节点,窗口小部件,站点结构,等等).
因为Binarycloud是为PHP构建的,在每一个页面请求上执行XML处理和转换是不切实际的.Phing用于”编译”XML元数据为可被PHP引擎处理的数组形式.
当然,XML”编译”只是Binarycloud使用Phing构建系统的许多方法中的一个.Phing构建系统使你能够:
1.
2.
phing -f mybuildfile.xml mytarget
键入phing –h可以查看命令参数的描述
要使用Phing你必须安装PHP5.0.0b1和以上的版本并且加上 –with-libxml2,和—with-xsl选项.
自2.0.0b1版之后,你可以可以下载PEAR可安装包和完全的Phing分发包.如果你希望修改Phing,我们建议你下载完整的Phing发行包,这样你可以创建你自己的PEAR包.如果你知识简单地使用Phing作为项目的需要或构建其他的包,下载并且安装PEAR包.
PEAR 安装
C:\> pear install http://phing.info/pear/phing-current.tgz
PEAR安装工具将检查包的依赖性,并把Phing的执行脚本放到PHP的安装目录下面(pear命令脚本同时也在这个目录下面)
下载完整的发行包及非pear安装方法见
http://phing.info/docs/guide/2.2.0/chapters/Setup.html
调用Phing
XML和Phing
1.
2.
3.
4.
编写一个简单的构建文件
<?xml version="1.0" encoding="utf-8" ?>
<project name="FooBar" default="dist" basedir=".">
<!-- 创建文件夹 -->
<target name="prepare">
<echo msg="Preparing build..." />
<mkdir dir="./pub" />
</target>
<!-- 复制文件 -->
<target name="build" depends="prepare">
<echo>Building...</echo>
<copy todir="./pub/" >
</copy>
</target>
<!-- 打包 -->
<target name="dist" depends="build" if="">
<echo message="Creating archive..." />
<tar destfile="./phing.tar" compression="tar">
<fileset dir="./pub">
</fileset>
</tar>
</target>
<!-- 删除,清理 -->
<target name="clean">
<echo msg="Cleaning up..."/>
<delete dir="./pub" includeemptydirs="true" verbose="true" fail />
</target>
</project>
project 元素
<project>的属性:
name
basedir
default
将执行在此定义的项目默认目标
description 项目的描述
target 元素
属性
name
depends
if
unless
property 元素
<property name="sourcedir" value="/src/data/"/>
<echo msg="${sourcedir}"/>
这里在运行时${sourcedir}将被展开为/src/java
或者在命名行中:
phing –Dsourcedir=”/backup/data/” –f mybuild.xml内建属性
Phing给你提供了访问系统属性的能力,好像它已经通过<property>定义过的一样.例如,${php.version}展开为php的版本.
http://phing.info/docs/guide/2.2.0/chapters/appendixes/AppendixA- 有完整的内建属性的列表
一个复杂的例子
<?xml version="1.0" ?>
<project name="testsite" basedir="." default="main">
<property file="./mybuild.properties"/>
<property name="builddir" value="${projectdir}/pub" override="true" />
<property name="srcdir" value="${projectdir}/src" override="true" />
<!-- Fileset for all files -->
<fileset dir="${srcdir}" id="allfiles">
</fileset>
<!-- Main Target -->
<target name="main" description="main target">
</target>
<!-- Rebuild -->
<target name="rebuild" description="rebuilds this package">
</target>
</project>注意:
第一个propery元素仅包含file属性,这里file属性的值是一个相对的或绝对的指向属性文件的路径(属性文件:后缀名为 .properties,其中包含的键值对(key/value)的集合。
构建文件中的<fileset>标签.它定义一个文件集合,例如一组多个文件组成的集合.你还可以用<fileset>元素的子元素<include>和<exclude>包含和排除<fileset>文件模式指定的文件集合
另外<fileset>标签有id属性,通过id属性可以在其他地方引用.就像直接包含一样,通过引用实现了代码的复用
在第二个目标中使用了<phingcall>标签来调用了PhingTask任务
属性文件格式
属性文件定义属性.属性以键/值对的形式保存,并且只包含纯文本,属性文件的后缀名称一般是.properties,构建文件的默认属性文件是build.properties
# Property files contain key/value pairs
projectdir=/data1/
projectname = myproject