SlideShare a Scribd company logo
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 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
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
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
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.
• This could include
      – Configuring
      – Packaging
      – Uploading
      – Testing
      – Etc.

Hans Lellelid: Phing: Building in PHP        6
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
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
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
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
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 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
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
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
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 processing
• Many built-in tasks support <fileset>




Hans Lellelid: Phing: Building in PHP      16
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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
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
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
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 seen:
      – Task
      – Type
      – Selector
      – Filter
      – Mapper
      – Listener (logger)
      – ... and more.
Hans Lellelid: Phing: Building in PHP       35
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
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
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
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

More Related Content

What's hot

Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
Jose Manuel Ortega Candel
 
Nginx
NginxNginx
Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1
Patrycja Wegrzynowicz
 
Upgrade to java 16 or 17
Upgrade to java 16 or 17Upgrade to java 16 or 17
Upgrade to java 16 or 17
Johan Janssen
 
Getting started with DSpace 7 REST API
Getting started with DSpace 7 REST APIGetting started with DSpace 7 REST API
Getting started with DSpace 7 REST API
4Science
 
El sonido de los beatles
El sonido de los beatlesEl sonido de los beatles
El sonido de los beatles
pimenton
 
Primeros pasos con genexus 9
Primeros pasos con genexus 9Primeros pasos con genexus 9
Primeros pasos con genexus 9
Misael Fernando Perilla Benitez
 
HANA SPS07 Backup & Recovery
HANA SPS07 Backup & RecoveryHANA SPS07 Backup & Recovery
HANA SPS07 Backup & Recovery
SAP Technology
 
Express JS
Express JSExpress JS
Express JS
Designveloper
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
EDB
 
Spring security
Spring securitySpring security
Spring security
Saurabh Sharma
 
Delivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWSDelivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWS
NGINX, Inc.
 
Android Deobfuscation: Tools and Techniques
Android Deobfuscation: Tools and TechniquesAndroid Deobfuscation: Tools and Techniques
Android Deobfuscation: Tools and Techniques
caleb194331
 
AlfrescoとWeb Script
AlfrescoとWeb ScriptAlfrescoとWeb Script
AlfrescoとWeb Script
Ashitaba YOSHIOKA
 
Spring Security
Spring SecuritySpring Security
Spring Security
Sumit Gole
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
Shahar Evron
 
Magnolia CMS 5.0 - Architecture
Magnolia CMS 5.0 - ArchitectureMagnolia CMS 5.0 - Architecture
Magnolia CMS 5.0 - Architecture
Philipp Bärfuss
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
Ankit Gubrani
 
Salesforce Einstein analytics - Formation sur les-bases - By iMalka
Salesforce Einstein analytics - Formation sur les-bases - By iMalkaSalesforce Einstein analytics - Formation sur les-bases - By iMalka
Salesforce Einstein analytics - Formation sur les-bases - By iMalka
Ilan Malka
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
NGINX, Inc.
 

What's hot (20)

Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
 
Nginx
NginxNginx
Nginx
 
Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1
 
Upgrade to java 16 or 17
Upgrade to java 16 or 17Upgrade to java 16 or 17
Upgrade to java 16 or 17
 
Getting started with DSpace 7 REST API
Getting started with DSpace 7 REST APIGetting started with DSpace 7 REST API
Getting started with DSpace 7 REST API
 
El sonido de los beatles
El sonido de los beatlesEl sonido de los beatles
El sonido de los beatles
 
Primeros pasos con genexus 9
Primeros pasos con genexus 9Primeros pasos con genexus 9
Primeros pasos con genexus 9
 
HANA SPS07 Backup & Recovery
HANA SPS07 Backup & RecoveryHANA SPS07 Backup & Recovery
HANA SPS07 Backup & Recovery
 
Express JS
Express JSExpress JS
Express JS
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
 
Spring security
Spring securitySpring security
Spring security
 
Delivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWSDelivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWS
 
Android Deobfuscation: Tools and Techniques
Android Deobfuscation: Tools and TechniquesAndroid Deobfuscation: Tools and Techniques
Android Deobfuscation: Tools and Techniques
 
AlfrescoとWeb Script
AlfrescoとWeb ScriptAlfrescoとWeb Script
AlfrescoとWeb Script
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
Magnolia CMS 5.0 - Architecture
Magnolia CMS 5.0 - ArchitectureMagnolia CMS 5.0 - Architecture
Magnolia CMS 5.0 - Architecture
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
 
Salesforce Einstein analytics - Formation sur les-bases - By iMalka
Salesforce Einstein analytics - Formation sur les-bases - By iMalkaSalesforce Einstein analytics - Formation sur les-bases - By iMalka
Salesforce Einstein analytics - Formation sur les-bases - By iMalka
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 

Similar to Phing: Building with PHP

Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for You
hozn
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applications
hozn
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
Richard McIntyre
 
Introduction to PHP (SDPHP)
Introduction to PHP   (SDPHP)Introduction to PHP   (SDPHP)
Introduction to PHP (SDPHP)
Eric Johnson
 
Phing
PhingPhing
Phing
mdekrijger
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
Pantheon
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
dantleech
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
Pavan Kumar N
 
Introduction into PHP5 (Jeroen van Sluijs)
Introduction into PHP5 (Jeroen van Sluijs)Introduction into PHP5 (Jeroen van Sluijs)
Introduction into PHP5 (Jeroen van Sluijs)
Stefan Koopmanschap
 
PHP and PDFLib
PHP and PDFLibPHP and PDFLib
PHP and PDFLib
Adam Culp
 
Building and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingBuilding and Deploying PHP apps with Phing
Building and Deploying PHP apps with Phing
Michiel Rook
 
Building Custom PHP Extensions
Building Custom PHP ExtensionsBuilding Custom PHP Extensions
Building Custom PHP Extensions
AzRy LLC, Caucasus School of Technology
 
Introduction to PHP - SDPHP
Introduction to PHP - SDPHPIntroduction to PHP - SDPHP
Introduction to PHP - SDPHP
Eric Johnson
 
Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projects
Mpho Mphego
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Bastian Feder
 
Improving qa on php projects
Improving qa on php projectsImproving qa on php projects
Improving qa on php projects
Michelangelo van Dam
 
Basics PHP
Basics PHPBasics PHP
php basics
php basicsphp basics
php basics
NIRMAL FELIX
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themes
wpnepal
 
Php ppt
Php pptPhp ppt

Similar to Phing: Building with PHP (20)

Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for You
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applications
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
 
Introduction to PHP (SDPHP)
Introduction to PHP   (SDPHP)Introduction to PHP   (SDPHP)
Introduction to PHP (SDPHP)
 
Phing
PhingPhing
Phing
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Introduction into PHP5 (Jeroen van Sluijs)
Introduction into PHP5 (Jeroen van Sluijs)Introduction into PHP5 (Jeroen van Sluijs)
Introduction into PHP5 (Jeroen van Sluijs)
 
PHP and PDFLib
PHP and PDFLibPHP and PDFLib
PHP and PDFLib
 
Building and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingBuilding and Deploying PHP apps with Phing
Building and Deploying PHP apps with Phing
 
Building Custom PHP Extensions
Building Custom PHP ExtensionsBuilding Custom PHP Extensions
Building Custom PHP Extensions
 
Introduction to PHP - SDPHP
Introduction to PHP - SDPHPIntroduction to PHP - SDPHP
Introduction to PHP - SDPHP
 
Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projects
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
 
Improving qa on php projects
Improving qa on php projectsImproving qa on php projects
Improving qa on php projects
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 
php basics
php basicsphp basics
php basics
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themes
 
Php ppt
Php pptPhp ppt
Php ppt
 

Recently uploaded

RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Zilliz
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 

Recently uploaded (20)

RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 

Phing: Building with PHP

  • 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=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. 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=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. 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=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. 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=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. 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=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. 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=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. 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=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. 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=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. 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(quot;value: quot;.$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