Phing – PHP代码构建系统
什么是Phing?
Phing是一个基于Apache Ant的项目代码构建系统.你可以用她做传统的构建系统能做的任何事情,比如GNU make,并且Phing使用简单的XML构建文件和可扩展的”任务”使之成为易于使用和极具可扩展性的框架.
phing全名是phing is not GUN make, 我们可以使用Phing来实现php应用程序自动化部署。
Phing怎样工作
Phing使用包含一组项目构建描述的XML构建文件.构建文件由一些运行实际的命令的目标组成(比如复制文件,删除目录,执行数据库查询,等等).因此使用Phing,第一步要编写构建文件,然后运行Phing,在构建文件中定义的要执行的目标.
默认情况下,Phing将会查找一个叫build.xml的文件.(除非构建文件的名称不是build.xml,否则不必为Phing指定构建文件的名称) 并且,如果没有指定任何目标那么Phing将执行在
标签中设置的默认目标(default属性所指定的).
phing的安装
sudo pear channel-discover pear.phing.info sudo pear install phing/phing sudo pear install channel://pear.php.net/VersionControl_SVN-0.3.3
phing的使用
编写一个简单的构建文件:
<?xml version="1.0"?>
<project name="FooBar" default="dist" basedir=".">
<!—创建文件夹-->
<target name="prepare">
<echo msg="Preparing build..." />
<mkdir dir="./build" />
</target>
<!—复制文件-->
<target name="build" depends="prepare">
<echo>Building...</echo>
<copy file="./src/File.php" to="./build/File.php"/>
<copy file="./src/File2.php" to="./build/File2.php"/>
</target>
<!—打包-->
<target name="dist" depends="build">
<echo message="Creating archive..." />
<tar outfile="furbee.tar.gz" basedir="./build"/>
</target>
<!—删除,清理-->
<target name="clean">
<echo msg="Cleaning up..."/>
<delete file="./build"/>
</target>
</project>
Phing的元素
project 元素: 文件序言之后紧跟着的第一个元素的是 , 此元素是一个包含其他元素的容器,并且有以下属性:
| 属性 | 含义 |
|---|---|
| name | 项目的名称 |
| basedir | 项目的根目录,如果未指定将使用当前目录 |
| default | 在调用构建文件的时候,如果没有指定要执行的目标, 将执行在此定义的项目默认目标 |
target 元素: 一个目标可依赖其他的目标.你可能有一个在构建树中安装文件的目标,例如,创建一个tar.tgz分发包的目标. Target元素的属性:
| 属性 | 含义 |
|---|---|
| name | target的名称 |
| depends | 此target依赖的前置target;逗号分隔列表 |
| if | 为了使此目标得以执行而必须设置的属性的名称 |
| unless | 为了使此目标得以执行而禁止设置的属性的名称 |
任务元素: 一个任务是一段可执行的PHP代码段.此代码段实现了特定的行为(例如,复制文件).因此你必须在构建文件中定义,才能是Phing真正的调用它. 任务可以被分配一个id属性:
<taskname id=”taskID” …/>
property 元素:属性是在构建文件使用的基本的变量,可以在构建文件中通过 PropertyTask任务设置或在Phing外部通过命令行传递.通过命令行传递的属性总是会覆盖在构建文件中设置的属性,也就是说命令行是最后传递给Phing的,自然会覆盖先前在构建文件中设置的属性.
属性有一个名称和一个唯一的值.属性可以作为任务属性的值.这是通过在”${”和”}”包含属性名称来设置的.例如:
<propery name=”javasourcedir” value=”./src/java”/>
<javac srcdir=”${javasourcedir}”/>
这里在运行时${javasourcedir}将被展开为./src/java 。
更复杂的构建文件:
<?xml version="1.0"?>
<project name="lap" basedir="." default="help">
<property name="builddir" value="./build"/>
<property name="modulesDir" value="/usr/local/php5/lib/Modules"/>
<property name="domain" value="cardii.net"/>
<target name="prepare">
<echo msg="Preparing build..." />
<mkdir dir="${builddir}/public" />
<mkdir dir="${builddir}/lib" />
<mkdir dir="${builddir}/Modules" />
<mkdir dir="${builddir}/Websites" />
</target>
<target name="get">
<echo>Checkout lap code ...</echo>
<svncheckout svnpath="/usr/bin/svn" repositoryurl="http://${domain}/svn/Dh" todir="${builddir}"/>
<echo>Checkout builddirs root template ...</echo>
<svncheckout svnpath="/usr/bin/svn" repositoryurl="http://${domain}/svn/Websites" todir="${builddir}/Websites"/>
<echo>Changing file permissions...</echo>
<chmod mode="0777">
<fileset dir="${builddir}/Websites" />
</chmod>
<echo> Copying dir fckeditor and phpmyadmin ...</echo>
<copy todir="${builddir}/Modules">
<fileset dir="${modulesDir}">
<include name="fckeditor/**"/>
<include name="phpmyadmin/**"/>
</fileset>
</copy>
</target>
<target name="backup-db" description="Backup the database before upgrade.">
<if>
<not>
<isset property="db.password" />
</not>
<then>
<input propertyname="db.password" promptChar=":">Enter password for user ${db.user} for database ${db.name}</input>
</then>
</if>
<exec command="${extern.mysqldump} --quick -- password=${db.password} --user=${db.user} ${db.name} > ${db.name}.${DSTAMP}${TSTAMP}.sql" dir="${db.backup.dir}" escape="false" />
<zip destfile="${db.backup.dir}/${db.name}.${DSTAMP}${TSTAMP}.sql.zip">
<fileset dir="${db.backup.dir}">
<include name="${db.name}.${DSTAMP}${TSTAMP}.sql" />
</fileset>
</zip>
<delete file="${db.backup.dir}/${db.name}.${DSTAMP}${TSTAMP}.sql" />
</target>
<target name="help">
<echo>
Welcome to use Lap build script!
--------------------------------
You may use the following command format to build a target:
phing <target name>
where <target name> can be one of the following:
phing prepare
phing get
phing backup-db
-Dbuilddir="./$websitename" : $websitename required eg.s3shop.com.
-DmodulesDir="/usr/local/php/lib/Modules" : Modules path, not required
-Ddomain="cardii.com" : svn address.default: cardii.net
-f bulid.xml : not required
</echo>
</target>
</project>
作者: 石巍
参考文章: PHP工具介绍之二–项目自动化部署工具phing, Phing用户指南
链接: http://www.smartwei.com/js-add-event.html