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.
Building and deploying PHP applications
               with Phing

                Michiel Rook

            PHP UK Confer...
About me


  • Freelance PHP & Java contractor / consultant

  • PHP since ’99

  • Phing project lead

  • http://www.lin...
This Talk


  • Why use a build tool

  • What is Phing

  • Usage

  • Various examples

  • Extending Phing




        ...
Why Use A Build Tool?
Why Use A Build Tool




                                 Repetition
              http://www.flickr.com/photos/andrewmalo...
Repetition


  • We are human

  • We get bored

  • We forget things

  • We make mistakes




                       Bui...
Repetition


  • Version control

  • (Unit) Testing

  • Configuring

  • Packaging

  • Uploading

  • DB changes

  • .....
Repetition


  • Version control

  • (Unit) Testing

  • Configuring

  • Packaging

  • Uploading

  • DB changes

  • .....
Why Use A Build Tool




                                 Automate!
               http://www.flickr.com/photos/patrick_h/...
Automate!


  • Developers, testers, administrators...

  • Easier handover to new team members

  • Improves quality

  •...
What Is Phing




                http://www.flickr.com/photos/canucksfan604/5471322484/


                               ...
What Is Phing


  • PHing Is Not GNU make; it’s a PHP project build system or build tool
    based on Apache Ant.

  • Ori...
What Can Phing Do


  • Scripting using XML build files

  • Human readable

  • Mostly cross-platform

  • Minimal depende...
What Can Phing Do


  • Scripting using XML build files

  • Human readable

  • Mostly cross-platform

  • Minimal depende...
What Can Phing Do




                    Building and deploying PHP applications with Phing
Why Use Phing


  • Ant?

  • Rich set of tasks

  • Integration with PHP specific tools

  • Allows you to stay in the PHP...
The Basics
Installing Phing

  • PEAR installation

    $ pear channel-discover pear.phing.info
    $ pear install [--alldeps] phing/...
Build Files


  • Phing uses XML build files

  • Contain standard elements

       • Task: code that performs a specific fu...
Example Build File

  <project name="Example" default="world">
      <target name="hello">
          <echo>Hello</echo>
  ...
Properties

  • Simple key-value files (.ini)

  ## build.properties
  version=1.0

  • Can be expanded by using ${key} in ...
Filesets

  • Constructs a group of files to process

  • Supported by most tasks

   <fileset dir="./application" includes...
Filesets

  • Selectors allow fine-grained matching on certain attributes

  • contains, date, file name & size, ...

   <fi...
Mappers & Filters


  • Transform files during copy/move/...

  • Mappers

      • Change filename
      • Flatten directori...
Mappers & Filters

  <copy todir="${build}">
      <fileset refid="files"/>
      <mapper type="glob" from="*.txt" to="*.n...
Examples
Examples


  • Version control

  • Unit testing

  • Packaging

  • Deployment

  • Database migration

  • Continuous in...
Version Control

  • (CVS), SVN, Git

  <svncopy
     username="michiel"
     password="test"
     repositoryurl="svn://lo...
PHPUnit

  • Built-in support for most configuration options

  • Gathers code coverage information

  • Various output for...
PHPUnit Example

  • Stop the build when a test fails

  <phpunit haltonfailure="true" haltonerror="true"
      bootstrap=...
PHPUnit Example

  • Determine which files to include in the coverage report

  <coverage-setup database="reports/coverage....
PHPUnit Example

  • Generate some reports

  <phpunitreport infile="reports/testsuites.xml"
      format="frames" todir="...
Documentation

  • Phing currently integrates with popular documentation tools

      • DocBlox
      • PhpDocumentor
    ...
DocBlox




          Building and deploying PHP applications with Phing
Packaging

  • Create bundles or packages

  • Phing supports most popular formats: tar (pear), zip, phar

  <pearpkg name...
Packaging - TAR / ZIP

   <tar compression="gzip" destFile="package.tgz"
       basedir="build"/>

   <zip destfile="htmlf...
Packaging - PHAR

  <pharpackage
          compression="gzip"
          destfile="test.phar"
          stub="stub.php"
   ...
Putting it all together - deployments
Copying to a server

  • SSH

  <scp username="john" password="smith"
      host="webserver" todir="/www/htdocs/project/">...
Symbolic links

  • All releases stored in ”backup” directory

  • Symlink application directory to latest release (simila...
Multiple servers / targets

  • Several deployment targets: testing, staging, production, ...

  • Keep one property file p...
Database Migration

  • Set of delta SQL files (1-create-post.sql)

  • Tracks current version of your db in changelog tabl...
Database Migration

  • Delta scripts with do (up) & undo (down) parts

  --//

  CREATE TABLE ‘post‘ (
      ‘title‘ VARC...
Database Migration

  <dbdeploy
      url="sqlite:test.db"
      dir="deltas"
      outputfile="deploy.sql"
      undooutp...
Database Migration

  -- Fragment begins: 1 --
  INSERT INTO changelog
      (change_number, delta_set, start_dt, applied_...
Database Migration

  -- Fragment begins: 1 --

  DROP TABLE ‘post‘;

  --//

  DELETE FROM changelog
                    ...
Phing & Jenkins


  • Continuous integration

  • Phing plugin

  • Build periodically or after each commit

  • Verify an...
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Demonstration
Extending Phing
Extending Phing


  • Numerous extension points

      • Tasks
      • Types
      • Selectors
      • Filters
      • Map...
Sample Task

  • Extends from Task

  • Contains main() method and optionally init()

  • Setter method for each attribute...
Sample Task

  • Use taskdef to make Phing aware of your new task

  <project name="Example" default="default">
      <tas...
Ad Hoc Extension

  • Define a task within your build file

  <target name="main">
      <adhoc-task name="foo"><![CDATA[
  ...
Future Improvements


  • More tasks & support

  • Better performance

  • PHAR package (including popular dependencies)
...
Future Improvements


  • More tasks & support

  • Better performance

  • PHAR package (including popular dependencies)
...
Helpful Links


  • http://pear.php.net/

  • http://www.docblox-project.org/

  • http://www.dbdeploy.com/

  • http://ww...
Questions?




             http://joind.in/4954

             http://www.phing.info

                #phing (freenode)

 ...
Upcoming SlideShare
Loading in …5
×

of

Building and deploying PHP applications with Phing Slide 1 Building and deploying PHP applications with Phing Slide 2 Building and deploying PHP applications with Phing Slide 3 Building and deploying PHP applications with Phing Slide 4 Building and deploying PHP applications with Phing Slide 5 Building and deploying PHP applications with Phing Slide 6 Building and deploying PHP applications with Phing Slide 7 Building and deploying PHP applications with Phing Slide 8 Building and deploying PHP applications with Phing Slide 9 Building and deploying PHP applications with Phing Slide 10 Building and deploying PHP applications with Phing Slide 11 Building and deploying PHP applications with Phing Slide 12 Building and deploying PHP applications with Phing Slide 13 Building and deploying PHP applications with Phing Slide 14 Building and deploying PHP applications with Phing Slide 15 Building and deploying PHP applications with Phing Slide 16 Building and deploying PHP applications with Phing Slide 17 Building and deploying PHP applications with Phing Slide 18 Building and deploying PHP applications with Phing Slide 19 Building and deploying PHP applications with Phing Slide 20 Building and deploying PHP applications with Phing Slide 21 Building and deploying PHP applications with Phing Slide 22 Building and deploying PHP applications with Phing Slide 23 Building and deploying PHP applications with Phing Slide 24 Building and deploying PHP applications with Phing Slide 25 Building and deploying PHP applications with Phing Slide 26 Building and deploying PHP applications with Phing Slide 27 Building and deploying PHP applications with Phing Slide 28 Building and deploying PHP applications with Phing Slide 29 Building and deploying PHP applications with Phing Slide 30 Building and deploying PHP applications with Phing Slide 31 Building and deploying PHP applications with Phing Slide 32 Building and deploying PHP applications with Phing Slide 33 Building and deploying PHP applications with Phing Slide 34 Building and deploying PHP applications with Phing Slide 35 Building and deploying PHP applications with Phing Slide 36 Building and deploying PHP applications with Phing Slide 37 Building and deploying PHP applications with Phing Slide 38 Building and deploying PHP applications with Phing Slide 39 Building and deploying PHP applications with Phing Slide 40 Building and deploying PHP applications with Phing Slide 41 Building and deploying PHP applications with Phing Slide 42 Building and deploying PHP applications with Phing Slide 43 Building and deploying PHP applications with Phing Slide 44 Building and deploying PHP applications with Phing Slide 45 Building and deploying PHP applications with Phing Slide 46 Building and deploying PHP applications with Phing Slide 47 Building and deploying PHP applications with Phing Slide 48 Building and deploying PHP applications with Phing Slide 49 Building and deploying PHP applications with Phing Slide 50 Building and deploying PHP applications with Phing Slide 51 Building and deploying PHP applications with Phing Slide 52 Building and deploying PHP applications with Phing Slide 53 Building and deploying PHP applications with Phing Slide 54 Building and deploying PHP applications with Phing Slide 55 Building and deploying PHP applications with Phing Slide 56 Building and deploying PHP applications with Phing Slide 57 Building and deploying PHP applications with Phing Slide 58 Building and deploying PHP applications with Phing Slide 59 Building and deploying PHP applications with Phing Slide 60
Upcoming SlideShare
Phing: Building with PHP
Next
Download to read offline and view in fullscreen.

80 Likes

Share

Download to read offline

Building and deploying PHP applications with Phing

Download to read offline

Slides for my talk at the PHP UK Conference 2012.

Some of the examples discussed during the talk can be found at http://www.touchdownconsulting.nl/conferences/phing-phpuk2012-examples.tgz

If you attended, please leave me some feedback at http://joind.in/4954 - thanks!

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Building and deploying PHP applications with Phing

  1. 1. Building and deploying PHP applications with Phing Michiel Rook PHP UK Conference 2012
  2. 2. About me • Freelance PHP & Java contractor / consultant • PHP since ’99 • Phing project lead • http://www.linkedin.com/in/michieltcs • @michieltcs Building and deploying PHP applications with Phing
  3. 3. This Talk • Why use a build tool • What is Phing • Usage • Various examples • Extending Phing Building and deploying PHP applications with Phing
  4. 4. Why Use A Build Tool?
  5. 5. Why Use A Build Tool Repetition http://www.flickr.com/photos/andrewmalone/5162632817/ Building and deploying PHP applications with Phing
  6. 6. Repetition • We are human • We get bored • We forget things • We make mistakes Building and deploying PHP applications with Phing
  7. 7. Repetition • Version control • (Unit) Testing • Configuring • Packaging • Uploading • DB changes • ... Building and deploying PHP applications with Phing
  8. 8. Repetition • Version control • (Unit) Testing • Configuring • Packaging • Uploading • DB changes • ... • Boring! Building and deploying PHP applications with Phing
  9. 9. Why Use A Build Tool Automate! http://www.flickr.com/photos/patrick_h/6209981673/ Building and deploying PHP applications with Phing
  10. 10. Automate! • Developers, testers, administrators... • Easier handover to new team members • Improves quality • Reduces errors • Saves time • Consolidate scripts, reduce technical debt Building and deploying PHP applications with Phing
  11. 11. What Is Phing http://www.flickr.com/photos/canucksfan604/5471322484/ Building and deploying PHP applications with Phing
  12. 12. What Is Phing • PHing Is Not GNU make; it’s a PHP project build system or build tool based on Apache Ant. • Originally developed by Binarycloud • Ported to PHP5 by Hans Lellelid • 2004: my first commit • 2009: lead Building and deploying PHP applications with Phing
  13. 13. What Can Phing Do • Scripting using XML build files • Human readable • Mostly cross-platform • Minimal dependencies • Interface to various popular (PHP) tools Building and deploying PHP applications with Phing
  14. 14. What Can Phing Do • Scripting using XML build files • Human readable • Mostly cross-platform • Minimal dependencies • Interface to various popular (PHP) tools • ”Good glue” Building and deploying PHP applications with Phing
  15. 15. What Can Phing Do Building and deploying PHP applications with Phing
  16. 16. Why Use Phing • Ant? • Rich set of tasks • Integration with PHP specific tools • Allows you to stay in the PHP infrastructure • Easy to extend • Embed PHP code directly in the build file Building and deploying PHP applications with Phing
  17. 17. The Basics
  18. 18. Installing Phing • PEAR installation $ pear channel-discover pear.phing.info $ pear install [--alldeps] phing/phing • Optionally, install the documentation package $ pear install phing/phingdocs Building and deploying PHP applications with Phing
  19. 19. Build Files • Phing uses XML build files • Contain standard elements • Task: code that performs a specific function (svn checkout, mkdir, etc.) • Target: groups of tasks, can optionally depend on other targets • Project: root node, contains multiple targets Building and deploying PHP applications with Phing
  20. 20. Example Build File <project name="Example" default="world"> <target name="hello"> <echo>Hello</echo> </target> <target name="world" depends="hello"> <echo>World!</echo> </target> </project> Buildfile: /home/michiel/phing/simple.xml Example > hello: [echo] Hello Example > world: [echo] World! BUILD FINISHED Building and deploying PHP applications with Phing
  21. 21. Properties • Simple key-value files (.ini) ## build.properties version=1.0 • Can be expanded by using ${key} in the build file $ phing -propertyfile build.properties ... <project name="Example" default="default"> <target name="default"> <property file="build.properties" /> <echo>${version}</echo> </target> </project> Building and deploying PHP applications with Phing
  22. 22. Filesets • Constructs a group of files to process • Supported by most tasks <fileset dir="./application" includes="**"/> <fileset dir="./application"> <include name="**/*.php" /> <exclude name="**/*Test.php" /> </fileset> • References: define once, use many <fileset dir="./application" includes="**" id="files"/> <fileset refid="files"/> Building and deploying PHP applications with Phing
  23. 23. Filesets • Selectors allow fine-grained matching on certain attributes • contains, date, file name & size, ... <fileset dir="${dist}"> <and> <filename name="**"/> <date datetime="01/01/2011" when="before"/> </and> </fileset> Building and deploying PHP applications with Phing
  24. 24. Mappers & Filters • Transform files during copy/move/... • Mappers • Change filename • Flatten directories • Filters • Strip comments, white space • Replace values • Perform XSLT transformation • Translation (i18n) Building and deploying PHP applications with Phing
  25. 25. Mappers & Filters <copy todir="${build}"> <fileset refid="files"/> <mapper type="glob" from="*.txt" to="*.new.txt"/> <filterchain> <replaceregexp> <regexp pattern="rn" replace="n"/> <expandproperties/> </replaceregexp> </filterchain> </copy> Building and deploying PHP applications with Phing
  26. 26. Examples
  27. 27. Examples • Version control • Unit testing • Packaging • Deployment • Database migration • Continuous integration Building and deploying PHP applications with Phing
  28. 28. Version Control • (CVS), SVN, Git <svncopy username="michiel" password="test" repositoryurl="svn://localhost/phing/trunk/" todir="svn://localhost/phing/tags/1.0"/> <svnexport repositoryurl="svn://localhost/project/trunk/" todir="/home/michiel/dev"/> <svnlastrevision repositoryurl="svn://localhost/project/trunk/" propertyname="lastrev"/> <echo>Last revision: ${lastrev}</echo> Building and deploying PHP applications with Phing
  29. 29. PHPUnit • Built-in support for most configuration options • Gathers code coverage information • Various output formats (JUnit / Clover) • Reporting (JUnit style) Building and deploying PHP applications with Phing
  30. 30. PHPUnit Example • Stop the build when a test fails <phpunit haltonfailure="true" haltonerror="true" bootstrap="my_bootstrap.php" printsummary="true"> <batchtest> <fileset dir="src"> <include name="**/*Test.php"/> </fileset> </batchtest> </phpunit> Buildfile: /home/michiel/phpunit/build.xml Demo > test: [phpunit] Total tests run: 1, Failures: 1, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.00591 s Execution of target "test" failed for the following reason: /home/michiel/phpunit/build.xml:3:44: Test FAILURE (testSayHello in class HelloWorldTest): Failed asserting that two strings are equal. Building and deploying PHP applications with Phing
  31. 31. PHPUnit Example • Determine which files to include in the coverage report <coverage-setup database="reports/coverage.db"> <fileset dir="src"> <include name="**/*.php"/> <exclude name="**/*Test.php"/> </fileset> </coverage-setup> • Gather code coverage and other data during the test run <phpunit codecoverage="true"> <formatter type="xml" todir="reports"/> <batchtest> <fileset dir="src"> <include name="**/*Test.php"/> </fileset> </batchtest> </phpunit> Building and deploying PHP applications with Phing
  32. 32. PHPUnit Example • Generate some reports <phpunitreport infile="reports/testsuites.xml" format="frames" todir="reports/tests"/> <coverage-report outfile="reports/coverage.xml"> <report todir="reports/coverage" title="Demo"/> </coverage-report> Building and deploying PHP applications with Phing
  33. 33. Documentation • Phing currently integrates with popular documentation tools • DocBlox • PhpDocumentor • ApiGen • Also supports r(e)ST (reStructuredText) <docblox title="Phing API Documentation" output="docs" quiet="true"> <fileset dir="../../classes"> <include name="**/*.php"/> </fileset> </docblox> Building and deploying PHP applications with Phing
  34. 34. DocBlox Building and deploying PHP applications with Phing
  35. 35. Packaging • Create bundles or packages • Phing supports most popular formats: tar (pear), zip, phar <pearpkg name="demo" dir="."> <fileset refid="files"/> <option name="outputdirectory" value="./build"/> <option name="description">Test package</option> <option name="version" value="0.1.0"/> <option name="state" value="beta"/> <mapping name="maintainers"> <element> <element key="handle" value="test"/> <element key="name" value="Test"/> <element key="email" value="test@test.nl"/> <element key="role" value="lead"/> </element> </mapping> </pearpkg> Building and deploying PHP applications with Phing
  36. 36. Packaging - TAR / ZIP <tar compression="gzip" destFile="package.tgz" basedir="build"/> <zip destfile="htmlfiles.zip"> <fileset dir="."> <include name="**/*.html"/> </fileset> </zip> Building and deploying PHP applications with Phing
  37. 37. Packaging - PHAR <pharpackage compression="gzip" destfile="test.phar" stub="stub.php" basedir="."> <fileset dir="hello"> <include name="**/**" /> </fileset> <metadata> <element name="version" value="1.0" /> <element name="authors"> <element name="John Doe"> <element name="e-mail" value="john@example.com" /> </element> </element> </metadata> </pharpackage> Building and deploying PHP applications with Phing
  38. 38. Putting it all together - deployments
  39. 39. Copying to a server • SSH <scp username="john" password="smith" host="webserver" todir="/www/htdocs/project/"> <fileset dir="test"> <include name="*.html"/> </fileset> </scp> • FTP <ftpdeploy host="server01" username="john" password="smit" dir="/var/www"> <fileset dir="."> <include name="*.html"/> </fileset> </ftpdeploy> Building and deploying PHP applications with Phing
  40. 40. Symbolic links • All releases stored in ”backup” directory • Symlink application directory to latest release (similar to Capistrano) • Allows for easy (code) rollbacks <svnlastrevision repositoryurl="${deploy.svn}" property="deploy.rev"/> <svnexport repositoryurl="${deploy.svn}" todir="/www/releases/build-${deploy.rev}"/> <symlink target="/www/releases/build-${deploy.rev}" link="/www/current"/> • Also on a remote server <ssh host="webserver" command="ln -s /www/releases/build-${deploy.rev} /www/current"/> Building and deploying PHP applications with Phing
  41. 41. Multiple servers / targets • Several deployment targets: testing, staging, production, ... • Keep one property file per target • Select property file based on input <input propertyname="env" validargs="testing,staging,production"> Enter environment name </input> <property file="${env}.properties"/> <ssh host="${deploy.host}" command="..."/> Building and deploying PHP applications with Phing
  42. 42. Database Migration • Set of delta SQL files (1-create-post.sql) • Tracks current version of your db in changelog table • Generates do and undo SQL files CREATE TABLE changelog ( change_number BIGINT NOT NULL, delta_set VARCHAR(10) NOT NULL, start_dt TIMESTAMP NOT NULL, complete_dt TIMESTAMP NULL, applied_by VARCHAR(100) NOT NULL, description VARCHAR(500) NOT NULL ) Building and deploying PHP applications with Phing
  43. 43. Database Migration • Delta scripts with do (up) & undo (down) parts --// CREATE TABLE ‘post‘ ( ‘title‘ VARCHAR(255), ‘time_created‘ DATETIME, ‘content‘ MEDIUMTEXT ); --//@UNDO DROP TABLE ‘post‘; --// Building and deploying PHP applications with Phing
  44. 44. Database Migration <dbdeploy url="sqlite:test.db" dir="deltas" outputfile="deploy.sql" undooutputfile="undo.sql"/> <pdosqlexec src="deploy.sql" url="sqlite:test.db"/> Buildfile: /home/michiel/dbdeploy/build.xml Demo > migrate: [dbdeploy] Getting applied changed numbers from DB: mysql:host=localhost;dbname=demo [dbdeploy] Current db revision: 0 [dbdeploy] Checkall: [pdosqlexec] Executing file: /home/michiel/dbdeploy/deploy.sql [pdosqlexec] 3 of 3 SQL statements executed successfully BUILD FINISHED Building and deploying PHP applications with Phing
  45. 45. Database Migration -- Fragment begins: 1 -- INSERT INTO changelog (change_number, delta_set, start_dt, applied_by, description) VALUES (1, ’Main’, NOW(), ’dbdeploy’, ’1-create_initial_schema.sql’); --// CREATE TABLE ‘post‘ ( ‘title‘ VARCHAR(255), ‘time_created‘ DATETIME, ‘content‘ MEDIUMTEXT ); UPDATE changelog SET complete_dt = NOW() WHERE change_number = 1 AND delta_set = ’Main’; -- Fragment ends: 1 -- Building and deploying PHP applications with Phing
  46. 46. Database Migration -- Fragment begins: 1 -- DROP TABLE ‘post‘; --// DELETE FROM changelog WHERE change_number = 1 AND delta_set = ’Main’; -- Fragment ends: 1 -- Building and deploying PHP applications with Phing
  47. 47. Phing & Jenkins • Continuous integration • Phing plugin • Build periodically or after each commit • Verify and test the build • Deploy results Building and deploying PHP applications with Phing
  48. 48. Phing & Jenkins Building and deploying PHP applications with Phing
  49. 49. Phing & Jenkins Building and deploying PHP applications with Phing
  50. 50. Phing & Jenkins Building and deploying PHP applications with Phing
  51. 51. Demonstration
  52. 52. Extending Phing
  53. 53. Extending Phing • Numerous extension points • Tasks • Types • Selectors • Filters • Mappers • Loggers • ... Building and deploying PHP applications with Phing
  54. 54. Sample Task • Extends from Task • Contains main() method and optionally init() • Setter method for each attribute in the build file class SampleTask extends Task { private $var; public function setVar($v) { $this->var = $v; } public function main() { $this->log("value: " . $this->var); } } Building and deploying PHP applications with Phing
  55. 55. Sample Task • Use taskdef to make Phing aware of your new task <project name="Example" default="default"> <taskdef name="sample" classpath="/dev/src" classname="tasks.my.SampleTask" /> <target name="default"> <sample var="Hello World" /> </target> </project> Building and deploying PHP applications with Phing
  56. 56. Ad Hoc Extension • Define a task within your build file <target name="main"> <adhoc-task name="foo"><![CDATA[ class FooTest extends Task { private $bar; function setBar($bar) { $this->bar = $bar; } function main() { $this->log("In FooTest: " . $this->bar); } } ]]></adhoc-task> <foo bar="TEST"/> </target> Building and deploying PHP applications with Phing
  57. 57. Future Improvements • More tasks & support • Better performance • PHAR package (including popular dependencies) • More documentation • Increased test coverage • IDE support Building and deploying PHP applications with Phing
  58. 58. Future Improvements • More tasks & support • Better performance • PHAR package (including popular dependencies) • More documentation • Increased test coverage • IDE support • Pull requests! :-) Building and deploying PHP applications with Phing
  59. 59. Helpful Links • http://pear.php.net/ • http://www.docblox-project.org/ • http://www.dbdeploy.com/ • http://www.jenkins-ci.org/ • http://www.phing.info/docs/guide/stable/ • http://github.com/phingofficial/phing Building and deploying PHP applications with Phing
  60. 60. Questions? http://joind.in/4954 http://www.phing.info #phing (freenode) @phingofficial Thank you! Building and deploying PHP applications with Phing
  • return001

    Aug. 20, 2020
  • isururanawaka7

    Nov. 12, 2017
  • BenedettoAsta1

    Jul. 26, 2017
  • cstabor

    Apr. 11, 2017
  • pauluZ

    Mar. 1, 2017
  • carlossing

    Nov. 28, 2016
  • TomaszUrbanski2

    Aug. 23, 2016
  • freestrings

    May. 27, 2016
  • ValmirFdaSilva

    May. 25, 2016
  • sandeepannath

    Feb. 26, 2016
  • MichaelBolli

    Feb. 16, 2016
  • mouson

    Dec. 22, 2015
  • rodman

    Nov. 17, 2015
  • cassiosantos

    Aug. 30, 2015
  • ssuser354a69

    Jun. 21, 2015
  • MichaTrzciski

    Apr. 29, 2015
  • shahariaazam

    Mar. 6, 2015
  • georgepapadopoulos3979489

    Feb. 23, 2015
  • codejunior

    Jan. 20, 2015
  • iputter

    Dec. 22, 2014

Slides for my talk at the PHP UK Conference 2012. Some of the examples discussed during the talk can be found at http://www.touchdownconsulting.nl/conferences/phing-phpuk2012-examples.tgz If you attended, please leave me some feedback at http://joind.in/4954 - thanks!

Views

Total views

61,516

On Slideshare

0

From embeds

0

Number of embeds

1,647

Actions

Downloads

524

Shares

0

Comments

0

Likes

80

×