Phing: Building with PHP

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

2 comments

Comments 1 - 2 of 2 previous next Post a comment

  • guesta6da8c5c guesta6da8c5c 1 month ago
    yeah, i also spent some time looking for the jslint task:)
    is this jsl good enough? i mean version 0.3, last refresh 2004 or 2006?!
    is there a way to use the crockford jslint? (without using rhino of course)
  • ctrabold ctrabold 11 months ago
    There's a small typo in Row ' uses external jsl utility':

    does not work. Use (with two 'll' instead).
Post a comment
Embed Video
Edit your comment Cancel

19 Favorites

Phing: Building with PHP - Presentation Transcript

  1. Phing: Building in PHP Hans Lellelid International PHP Conference 2007-11-06
  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. 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. 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. Why do I need a build tool for PHP? Hans Lellelid: Phing: Building in PHP 5
  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. 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. 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. 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. 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. How do I start using it? Hans Lellelid: Phing: Building in PHP 11
  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. A simple build file <project name=\"sample\" default=\"main\"> <property name=\"ver\" value=\"1.0.1\"/> <property file=\"build.properties\"/> <target name=\"main\"> <mkdir dir=\"./build/${ver}\"> <copy todir=\"./build/${ver}\"> <fileset dir=\".\" includes=\"*.txt\" /> </copy> </target> </project> Hans Lellelid: Phing: Building in PHP 13
  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. Packaging and Deployment Hans Lellelid: Phing: Building in PHP 15
  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. Fileset Examples <fileset dir=\"./webapp\" includes=\"**/*.html\" excludes=\"**/test-*\"/> <fileset dir=\"./webapp\"> <include name=\"img/${theme}/*.jpg\"/> <include name=\"tpl/${lang}/*.phtml\"/> <exclude name=\"**/*.bak\"/> <exclude name=\"**/test/**\"/> </fileset> Hans Lellelid: Phing: Building in PHP 17
  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. Selector examples <fileset dir=\"${htdocs.dir}\"> <includes name=”**/*.html”/> <containsregexp expression=\"/prod\\d+\\.php\"/> </fileset> <fileset dir=\"${dist}\" includes=\"**\"> <or> <present targetdir=\"${htdocs}\"/> <date datetime=\"01/01/2007\" when=\"before\"/> </or> </fileset> Hans Lellelid: Phing: Building in PHP 19
  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. Mapper examples <copy todir=\"/tmp\"> <mapper type=\"glob\" from=\"*.php\" to=\"*.php.bak\" /> <fileset dir=\"./app\" includes=\"**/*.php\" /> </copy> <copy todir=\"${deploy.dir}\"> <mapper type=\"regexp\" from=\"^(.*)-(.*)\\.conf\\.xml\" to=\"\\1.\\2.php\"/> <fileset dir=\"${config.src.dir}\" includes=\"**/*.conf.xml\" /> </copy> Hans Lellelid: Phing: Building in PHP 21
  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. Filtering examples <copy todir=\"${build}/htdocs\"> <fileset includes=\"*.html\"/> <filterchain> <replaceregexp> <regexp pattern=\"\\r\\n\" replace=\"\\n\"/> </replaceregexp> <tidyfilter encoding=\"utf8\"> <config name=\"indent\" value=\"true\"/> </tidyfilter> </filterchain> </copy> Hans Lellelid: Phing: Building in PHP 23
  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. 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. Development Cycle Hans Lellelid: Phing: Building in PHP 26
  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. 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. PHP API Docs • Phing includes support for PhpDocumentor using the <phpdoc> task. <phpdoc title=\"API Documentation\" destdir=\"apidocs\" sourcecode=\"no\" output=\"HTML:Smarty:PHP\"> <fileset dir=\"./classes\"> <include name=\"**/*.php\" /> </fileset> </phpdoc> Hans Lellelid: Phing: Building in PHP 29
  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. PHPUnit Example <phpunit2 haltonerror=\"true\" haltonfailure=\"false\" printsummary=\"true\"> <batchtest> <fileset dir=\"${tests.dir}\"> <include name=\"**/*Test.php\"/> </fileset> </batchtest> </phpunit2> Hans Lellelid: Phing: Building in PHP 31
  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. Xinc Config Example <projects> <project name=\"Project Name\" interval=\"10\"> <modificationsets> <svn directory=\"/var/projects/test\"/> </modificationsets> <builder type=\"phing\" buildfile=\"/var/projects/test/build.xml\" target=\"build\"/> <publishers> <email to=\"myemail@example.com\" publishonfailure=\"true\"/> </publishers> </project> </projects> Hans Lellelid: Phing: Building in PHP 33
  34. Extending Phing Hans Lellelid: Phing: Building in PHP 34
  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. 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. Sample Task class SampleTask extends Task { private $var; public function setVar($v) { $this->var = $v; } public function main() { $this->log(\"value: \".$this->var); } } Hans Lellelid: Phing: Building in PHP 37
  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. 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

hoznhozn, 2 years ago

custom

10762 views, 19 favs, 4 embeds more stats

Phing presentation from 2007 International PHP Conf more

More Info

© All Rights Reserved

Go to text version
  • Total Views 10762
    • 10398 on SlideShare
    • 364 from embeds
  • Comments 2
  • Favorites 19
  • Downloads 315
Most viewed embeds
  • 210 views on http://blog.fedecarg.com
  • 137 views on http://phpimpact.wordpress.com
  • 16 views on http://blog.raamdev.com
  • 1 views on http://twiki.corp.yahoo.com

more

All embeds
  • 210 views on http://blog.fedecarg.com
  • 137 views on http://phpimpact.wordpress.com
  • 16 views on http://blog.raamdev.com
  • 1 views on http://twiki.corp.yahoo.com

less

Flagged as inappropriate Flag as inappropriate
Flag as innappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel

Categories