Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Phing: Building in PHP
                   Hans Lellelid
   International PHP Conference
                     2007-11-06
Introduction
• My name is Hans Lellelid
• Developer & Manager at Applied Security,
  Inc. (near Washington DC).
• PHP deve...
This Talk
•   Brief Overview & “Justification”
•   Basic Usage
•   Packaginig & Deployment
•   Development Cycle
•   Exten...
What is it?
•   PHing Is Not Gnumake
•   It is a project build tool.
•   Original PHP4 version by Andreas Aderhold
•   Wri...
Why do I need a build tool
                  for PHP?



Hans Lellelid: Phing: Building in PHP   5
Building != Compiling
• In this context, “building” is really any non-
  development task that supports your
  application...
PHP apps > web pages
• PHP is no longer a simple web scripting
  language.
• We are using PHP to do all sorts of things
  ...
Web apps get deployed
• PHP web applications do eventually get
  deployed.
• Deployment has a whole lot of implications:
 ...
Phing can help.
• Anything you can do with a shell script you
  can do with Phing.
• And a whole lot more ...
      – Tran...
But why Phing specifically?
• Other choices do exist: Ant, Rake, NAnt
• With Phing you only need PHP.
• A PHP tool for PHP...
How do I start using it?




Hans Lellelid: Phing: Building in PHP     11
The Basics
• Phing provides a simple shell script
  (“phing”) that launches the Phing PHP app.
• You create build files in...
A simple build file
     <project name=quot;samplequot; default=quot;mainquot;>
        <property name=quot;verquot; value...
Javaisms
• Properties
      – Properties are variables for build scripts.
      – Like php.ini, but more flexible:
       ...
Packaging and Deployment




Hans Lellelid: Phing: Building in PHP   15
Match a bunch of files
• The <fileset> type represents an
  extremely powerful way to select a
  group of files for proces...
Fileset Examples
    <fileset dir=quot;./webappquot;
     includes=quot;**/*.htmlquot;
     excludes=quot;**/test-*quot;/>...
Fine-tuned Selection
• Selectors provide entirely new dimensions
  for <fileset> file matching criteria.
• Some examples o...
Selector examples
 <fileset dir=quot;${htdocs.dir}quot;>
    <includes name=”**/*.html”/>
    <containsregexp
      expres...
Filesystem Transformations
• The <mapper> element adds filesystem
  transformation capabilities to supporting
  tasks (e.g...
Mapper examples
 <copy todir=quot;/tmpquot;>
    <mapper type=quot;globquot; from=quot;*.phpquot;
      to=quot;*.php.bakq...
Data Transformation
• The <filterchain> type adds data
  filtering/transforming capabilities to
  supporting tasks.
• Task...
Filtering examples
    <copy todir=quot;${build}/htdocsquot;>
       <fileset includes=quot;*.htmlquot;/>
       <filterch...
Packaging Tools
• The <tar> and <zip> tasks allow you to
  bundle up your moved directories. (Of
  course, they support <f...
Deployment Tools
• Deployment means different things for
  different people.
• Phing includes some tasks to “put” stuff
  ...
Development Cycle




Hans Lellelid: Phing: Building in PHP    26
Building for Developers
• Not all build tasks are for deployment.
• Some build activities are specifically for
  developer...
Validating
• Phing includes several contributed lint tasks
  for checking the validity of source code:
      – <jslint> us...
PHP API Docs
• Phing includes support for
  PhpDocumentor using the <phpdoc>
  task.
 <phpdoc title=quot;API Documentation...
Unit Testing
• Phing has extensive support for PHPUnit
  and SimpleTest unit testing frameworks
• PHPUnit tasks provide su...
PHPUnit Example
    <phpunit2 haltonerror=quot;truequot;
         haltonfailure=quot;falsequot;
         printsummary=quot...
Continuous Integration
• Code -> Commit -> Build -> Test ->
  Report
• CI tools watch the repository and provide
  automat...
Xinc Config Example
 <projects>
     <project name=quot;Project Namequot; interval=quot;10quot;>
         <modificationset...
Extending Phing




Hans Lellelid: Phing: Building in PHP       34
Paths for Extension
• Embedding PHP in build file.
• Write your own class to provide any of the
  functionality we have se...
Embedding PHP
• The <php> task allows you to evaluate a
  PHP expression, function call, etc. and store
  result in a prop...
Sample Task
    class SampleTask extends Task {

          private $var;

          public function setVar($v) {
         ...
Phing IRL
• Phing is being used by many organizations
  and open-source projects.
• In the real world, Phing is used ...
 ...
Where next?
• Visit http://phing.info for downloads,
  documentation, and issue tracking.
• Ask questions on the mailing l...
Upcoming SlideShare
Loading in …5
×

of

Phing: Building with PHP Slide 1 Phing: Building with PHP Slide 2 Phing: Building with PHP Slide 3 Phing: Building with PHP Slide 4 Phing: Building with PHP Slide 5 Phing: Building with PHP Slide 6 Phing: Building with PHP Slide 7 Phing: Building with PHP Slide 8 Phing: Building with PHP Slide 9 Phing: Building with PHP Slide 10 Phing: Building with PHP Slide 11 Phing: Building with PHP Slide 12 Phing: Building with PHP Slide 13 Phing: Building with PHP Slide 14 Phing: Building with PHP Slide 15 Phing: Building with PHP Slide 16 Phing: Building with PHP Slide 17 Phing: Building with PHP Slide 18 Phing: Building with PHP Slide 19 Phing: Building with PHP Slide 20 Phing: Building with PHP Slide 21 Phing: Building with PHP Slide 22 Phing: Building with PHP Slide 23 Phing: Building with PHP Slide 24 Phing: Building with PHP Slide 25 Phing: Building with PHP Slide 26 Phing: Building with PHP Slide 27 Phing: Building with PHP Slide 28 Phing: Building with PHP Slide 29 Phing: Building with PHP Slide 30 Phing: Building with PHP Slide 31 Phing: Building with PHP Slide 32 Phing: Building with PHP Slide 33 Phing: Building with PHP Slide 34 Phing: Building with PHP Slide 35 Phing: Building with PHP Slide 36 Phing: Building with PHP Slide 37 Phing: Building with PHP Slide 38 Phing: Building with PHP Slide 39
Upcoming SlideShare
Building and deploying PHP applications with Phing
Next
Download to read offline and view in fullscreen.

45 Likes

Share

Download to read offline

Phing: Building with PHP

Download to read offline

Phing presentation from 2007 International PHP Conference in Frankfurt.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Phing: Building with PHP

  1. 1. Phing: Building in PHP Hans Lellelid International PHP Conference 2007-11-06
  2. 2. Introduction • My name is Hans Lellelid • Developer & Manager at Applied Security, Inc. (near Washington DC). • PHP developer and OO evangelist. • I ported Phing to PHP5 in 2004. • I now manage the Phing project with Michiel Rook. Hans Lellelid: Phing: Building in PHP 2
  3. 3. This Talk • Brief Overview & “Justification” • Basic Usage • Packaginig & Deployment • Development Cycle • Extending Phing • Slides available at http://phing.info/presentations/ Hans Lellelid: Phing: Building in PHP 3
  4. 4. What is it? • PHing Is Not Gnumake • It is a project build tool. • Original PHP4 version by Andreas Aderhold • Written for PHP5 • Based on Apache Ant • Cross-platform (i.e. Windows too) • It seems to have caught on. – Propel, Prado, Symfony, Agavi, Xinc (to name a few) Hans Lellelid: Phing: Building in PHP 4
  5. 5. Why do I need a build tool for PHP? Hans Lellelid: Phing: Building in PHP 5
  6. 6. Building != Compiling • In this context, “building” is really any non- development task that supports your application. • This could include – Configuring – Packaging – Uploading – Testing – Etc. Hans Lellelid: Phing: Building in PHP 6
  7. 7. PHP apps > web pages • PHP is no longer a simple web scripting language. • We are using PHP to do all sorts of things on the CLI: – Run unit tests (PHPUnit, SimpleTest) – Build API docs (PhpDocumentor) – Install and Package (PEAR) Hans Lellelid: Phing: Building in PHP 7
  8. 8. Web apps get deployed • PHP web applications do eventually get deployed. • Deployment has a whole lot of implications: – Permissions – Environment setup – App Configuration Hans Lellelid: Phing: Building in PHP 8
  9. 9. Phing can help. • Anything you can do with a shell script you can do with Phing. • And a whole lot more ... – Transform directories and files. – Configure your application – Prepare files for deployment – Run unit tests – Do other useful stuff – like SVN commits or db initialization. Hans Lellelid: Phing: Building in PHP 9
  10. 10. But why Phing specifically? • Other choices do exist: Ant, Rake, NAnt • With Phing you only need PHP. • A PHP tool for PHP apps just makes a lot of sense: – Familiar territory, common environment – You can embed PHP directly in your build scripts. – You can integrate your own application code into Phing extensions. – Cross-pltform and small footprint. Hans Lellelid: Phing: Building in PHP 10
  11. 11. How do I start using it? Hans Lellelid: Phing: Building in PHP 11
  12. 12. The Basics • Phing provides a simple shell script (“phing”) that launches the Phing PHP app. • You create build files in XML • Build file organization: – Tasks: a “build-in” piece of code that performs a specific function. E.g. <mkdir> – Targets: grouping of Tasks that perform a more general function. E.g. Copy files to a new directory. – A Project: the root node for the build file. Hans Lellelid: Phing: Building in PHP 12
  13. 13. A simple build file <project name=quot;samplequot; default=quot;mainquot;> <property name=quot;verquot; value=quot;1.0.1quot;/> <property file=quot;build.propertiesquot;/> <target name=quot;mainquot;> <mkdir dir=quot;./build/${ver}quot;> <copy todir=quot;./build/${ver}quot;> <fileset dir=quot;.quot; includes=quot;*.txtquot; /> </copy> </target> </project> Hans Lellelid: Phing: Building in PHP 13
  14. 14. Javaisms • Properties – Properties are variables for build scripts. – Like php.ini, but more flexible: • tgz = ${pkg}-${ver}.tgz – Can be set in build script or imported from files. • Dot-path notation for class names: – path.to.Class = path/to/Class.php – Anwers question “How to represent both directory and class name in a single string?” Hans Lellelid: Phing: Building in PHP 14
  15. 15. Packaging and Deployment Hans Lellelid: Phing: Building in PHP 15
  16. 16. Match a bunch of files • The <fileset> type represents an extremely powerful way to select a group of files for processing • Many built-in tasks support <fileset> Hans Lellelid: Phing: Building in PHP 16
  17. 17. Fileset Examples <fileset dir=quot;./webappquot; includes=quot;**/*.htmlquot; excludes=quot;**/test-*quot;/> <fileset dir=quot;./webappquot;> <include name=quot;img/${theme}/*.jpgquot;/> <include name=quot;tpl/${lang}/*.phtmlquot;/> <exclude name=quot;**/*.bakquot;/> <exclude name=quot;**/test/**quot;/> </fileset> Hans Lellelid: Phing: Building in PHP 17
  18. 18. Fine-tuned Selection • Selectors provide entirely new dimensions for <fileset> file matching criteria. • Some examples of selectors: – Created before/after certain date – Greater/less than specified size – Type ('file' or 'dir') – At specific depth in dir structure – Having corresponding file in another dir. Hans Lellelid: Phing: Building in PHP 18
  19. 19. Selector examples <fileset dir=quot;${htdocs.dir}quot;> <includes name=”**/*.html”/> <containsregexp expression=quot;/prodd+.phpquot;/> </fileset> <fileset dir=quot;${dist}quot; includes=quot;**quot;> <or> <present targetdir=quot;${htdocs}quot;/> <date datetime=quot;01/01/2007quot; when=quot;beforequot;/> </or> </fileset> Hans Lellelid: Phing: Building in PHP 19
  20. 20. Filesystem Transformations • The <mapper> element adds filesystem transformation capabilities to supporting tasks (e.g. <copy>, <move>). • For example: – Change all “.php” files to “.html” – Remove dirs from filename – Change all files to the same filename • Custom mappers can be defined. Hans Lellelid: Phing: Building in PHP 20
  21. 21. Mapper examples <copy todir=quot;/tmpquot;> <mapper type=quot;globquot; from=quot;*.phpquot; to=quot;*.php.bakquot; /> <fileset dir=quot;./appquot; includes=quot;**/*.phpquot; /> </copy> <copy todir=quot;${deploy.dir}quot;> <mapper type=quot;regexpquot; from=quot;^(.*)-(.*).conf.xmlquot; to=quot;1.2.phpquot;/> <fileset dir=quot;${config.src.dir}quot; includes=quot;**/*.conf.xmlquot; /> </copy> Hans Lellelid: Phing: Building in PHP 21
  22. 22. Data Transformation • The <filterchain> type adds data filtering/transforming capabilities to supporting tasks. • Tasks that support <filterchain> include <copy>, <move>, <append> + more • For example: – Strip comments from files – Replace values in files (+ regexp) – Perform XSLT transformation • Easily add your own. Hans Lellelid: Phing: Building in PHP 22
  23. 23. Filtering examples <copy todir=quot;${build}/htdocsquot;> <fileset includes=quot;*.htmlquot;/> <filterchain> <replaceregexp> <regexp pattern=quot;rnquot; replace=quot;nquot;/> </replaceregexp> <tidyfilter encoding=quot;utf8quot;> <config name=quot;indentquot; value=quot;truequot;/> </tidyfilter> </filterchain> </copy> Hans Lellelid: Phing: Building in PHP 23
  24. 24. Packaging Tools • The <tar> and <zip> tasks allow you to bundle up your moved directories. (Of course, they support <fileset> too.) • <pearpkg> (and <pearpkg2>) tasks allow you to create PEAR packages using Phing. Hans Lellelid: Phing: Building in PHP 24
  25. 25. Deployment Tools • Deployment means different things for different people. • Phing includes some tasks to “put” stuff places: – <svn*> suite of tasks – <scp> • Database statement execution provided by <pdo> and <creole> tasks. Hans Lellelid: Phing: Building in PHP 25
  26. 26. Development Cycle Hans Lellelid: Phing: Building in PHP 26
  27. 27. Building for Developers • Not all build tasks are for deployment. • Some build activities are specifically for developer consumption: – Checking validity or cleaning documents – Building API documentation – Running unit tests • A more “traditional” build will likely also play a part in developer build functionality. Hans Lellelid: Phing: Building in PHP 27
  28. 28. Validating • Phing includes several contributed lint tasks for checking the validity of source code: – <jslint> uses external jsl utility. – <xmllint> uses built-in DOM support and validates with a schema file. – <phplint> users “php -l” • The <tidy> task also provides ability to perform validation and cleanup on HTML documents. Hans Lellelid: Phing: Building in PHP 28
  29. 29. PHP API Docs • Phing includes support for PhpDocumentor using the <phpdoc> task. <phpdoc title=quot;API Documentationquot; destdir=quot;apidocsquot; sourcecode=quot;noquot; output=quot;HTML:Smarty:PHPquot;> <fileset dir=quot;./classesquot;> <include name=quot;**/*.phpquot; /> </fileset> </phpdoc> Hans Lellelid: Phing: Building in PHP 29
  30. 30. Unit Testing • Phing has extensive support for PHPUnit and SimpleTest unit testing frameworks • PHPUnit tasks provide support for – Batch testing using <fileset> to select all the tests you wish to run. – Output in XML (Junit-compatible) and Plain text. – Report generator creates XHTML reports using XSLT – Code coverage reports (requires Xdebug) Hans Lellelid: Phing: Building in PHP 30
  31. 31. PHPUnit Example <phpunit2 haltonerror=quot;truequot; haltonfailure=quot;falsequot; printsummary=quot;truequot;> <batchtest> <fileset dir=quot;${tests.dir}quot;> <include name=quot;**/*Test.phpquot;/> </fileset> </batchtest> </phpunit2> Hans Lellelid: Phing: Building in PHP 31
  32. 32. Continuous Integration • Code -> Commit -> Build -> Test -> Report • CI tools watch the repository and provide automated building, testing, reporting. • CruiseControl has a Phing builder. • Xinc provides CI tool functionality written in PHP. • Xinc is built to use Phing Hans Lellelid: Phing: Building in PHP 32
  33. 33. Xinc Config Example <projects> <project name=quot;Project Namequot; interval=quot;10quot;> <modificationsets> <svn directory=quot;/var/projects/testquot;/> </modificationsets> <builder type=quot;phingquot; buildfile=quot;/var/projects/test/build.xmlquot; target=quot;buildquot;/> <publishers> <email to=quot;myemail@example.comquot; publishonfailure=quot;truequot;/> </publishers> </project> </projects> Hans Lellelid: Phing: Building in PHP 33
  34. 34. Extending Phing Hans Lellelid: Phing: Building in PHP 34
  35. 35. Paths for Extension • Embedding PHP in build file. • Write your own class to provide any of the functionality we have seen: – Task – Type – Selector – Filter – Mapper – Listener (logger) – ... and more. Hans Lellelid: Phing: Building in PHP 35
  36. 36. Embedding PHP • The <php> task allows you to evaluate a PHP expression, function call, etc. and store result in a property. • The <adhoc> task allows you to embed PHP directly. Useful for including setup files. <adhoc><![CDATA[ require_once 'propel/Propel.php'; Propel::init('bookstore-conf.php'); ]]></adhoc> Hans Lellelid: Phing: Building in PHP 36
  37. 37. Sample Task class SampleTask extends Task { private $var; public function setVar($v) { $this->var = $v; } public function main() { $this->log(quot;value: quot;.$this->var); } } Hans Lellelid: Phing: Building in PHP 37
  38. 38. Phing IRL • Phing is being used by many organizations and open-source projects. • In the real world, Phing is used ... – as an interactive CLI application configuration or installation script, – to upgrade production webservers, – to manage product release builds, – as a quick way to reorganize a directory tree, – & much, much more. Hans Lellelid: Phing: Building in PHP 38
  39. 39. Where next? • Visit http://phing.info for downloads, documentation, and issue tracking. • Ask questions on the mailing lists. – users@phing.tigris.org – dev@phing.tigris.org Hans Lellelid: Phing: Building in PHP 39
  • kiathaw

    May. 10, 2015
  • JiangYu7408

    Apr. 23, 2015
  • rdccosmo

    Aug. 28, 2014
  • sbarrax

    Nov. 7, 2013
  • ankitmathur111

    Jun. 28, 2013
  • lorenzomar

    May. 1, 2013
  • SimonasSerlinskas

    Mar. 26, 2013
  • FredrickSykes

    Jan. 26, 2013
  • tsouloftas

    Sep. 23, 2012
  • lokiheero

    Feb. 28, 2012
  • t3c

    Dec. 22, 2011
  • dezand

    Dec. 21, 2011
  • christostsiavos

    Nov. 6, 2011
  • lonelyteers

    Oct. 22, 2011
  • sabitas

    Sep. 18, 2011
  • gaoheming

    Aug. 30, 2011
  • moshling

    Jul. 12, 2011
  • Gribanov

    Mar. 8, 2011
  • brumph

    Nov. 29, 2010
  • lopper69

    Jul. 11, 2010

Phing presentation from 2007 International PHP Conference in Frankfurt.

Views

Total views

32,337

On Slideshare

0

From embeds

0

Number of embeds

1,446

Actions

Downloads

736

Shares

0

Comments

0

Likes

45

×