SlideShare a Scribd company logo

Putting Phing to Work for You

H
hozn

Slides from Phing workshop from 2007 International PHP Conference in Frankfurt.

1 of 41
Download to read offline
Putting Phing to Work for You
                          Hans Lellelid
          International PHP Conference
                            2007-11-05
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: Putting Phing to Work for You    2
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)
•   http://phing.info/



Hans Lellelid: Putting Phing to Work for You      3
Workshop Topics: Fundamentals
•   Phing basics
•   Creating a first build file
•   Transforming directories and files
•   Performing PDO tasks
•   Gathering user input
•   Building phpdoc
•   Running unit tests
•   Integrating with CI tools


Hans Lellelid: Putting Phing to Work for You   4
Workshop Topics: Extension
•   Using PHP code in a build file
•   Building a simple Task
•   Writing more complex Task
•   Creating a shared Type
•   Custom filters
•   Custom selectors
•   Custom logger/listener
•   Custom input handlers


Hans Lellelid: Putting Phing to Work for You   5
Getting Started




Hans Lellelid: Putting Phing to Work for You   6
Ad

Recommended

Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with PhingMichiel Rook
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHPhozn
 
Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Michiel Rook
 
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 PhingMichiel Rook
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With PhingDaniel Cousineau
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingMihail Irintchev
 

More Related Content

What's hot

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with PhingMichiel Rook
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applicationshozn
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentShahar Evron
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsAdam Culp
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshopNick Belhomme
 
PHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxPHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxNick Belhomme
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Clark Everetts
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginnersAdam Englander
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package developmentTihomir Opačić
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-onsAlin Voinea
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stackKris Buytaert
 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using DjangoNathan Eror
 
Virtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayVirtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayPuppet
 
Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ramon de la Fuente
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi Chen
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in PerlNaveen Gupta
 

What's hot (20)

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with Phing
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applications
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with Jenkins
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshop
 
PHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxPHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBenelux
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package development
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-ons
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using Django
 
Virtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayVirtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 May
 
Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in Perl
 

Similar to Putting Phing to Work for You

Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projectsMpho Mphego
 
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 LibrariesPantheon
 
Power shell training
Power shell trainingPower shell training
Power shell trainingDavid Brabant
 
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
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iAlan Seiden
 
Installing Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsInstalling Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsJonathan Bloom
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017Mandi Walls
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Pantheon
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestrationPaolo Tonin
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphpdantleech
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAsKellyn Pot'Vin-Gorman
 
Assignment 1 MapReduce With Hadoop
Assignment 1  MapReduce With HadoopAssignment 1  MapReduce With Hadoop
Assignment 1 MapReduce With HadoopAllison Thompson
 
Holy PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionHoly PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionDave Diehl
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsMichael Lange
 

Similar to Putting Phing to Work for You (20)

Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projects
 
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
 
Power shell training
Power shell trainingPower shell training
Power shell training
 
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-)
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM i
 
Installing Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsInstalling Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for Windows
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestration
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs
 
Assignment 1 MapReduce With Hadoop
Assignment 1  MapReduce With HadoopAssignment 1  MapReduce With Hadoop
Assignment 1 MapReduce With Hadoop
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
 
Holy PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionHoly PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood edition
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
 

Recently uploaded

Confoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceConfoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceSusan Ibach
 
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...Neo4j
 
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...UiPathCommunity
 
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, GoogleISPMAIndia
 
Apex Replay Debugger and Salesforce Platform Events.pptx
Apex Replay Debugger and Salesforce Platform Events.pptxApex Replay Debugger and Salesforce Platform Events.pptx
Apex Replay Debugger and Salesforce Platform Events.pptxmohayyudin7826
 
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24Umar Saif
 
AI Act & Standardization: UNINFO involvement
AI Act & Standardization: UNINFO involvementAI Act & Standardization: UNINFO involvement
AI Act & Standardization: UNINFO involvementMimmo Squillace
 
Campotel: Telecommunications Infra and Network Builder - Company Profile
Campotel: Telecommunications Infra and Network Builder - Company ProfileCampotel: Telecommunications Infra and Network Builder - Company Profile
Campotel: Telecommunications Infra and Network Builder - Company ProfileCampotelPhilippines
 
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...htrindia
 
From Challenger to Champion: How SpiraPlan Outperforms JIRA+Plugins
From Challenger to Champion: How SpiraPlan Outperforms JIRA+PluginsFrom Challenger to Champion: How SpiraPlan Outperforms JIRA+Plugins
From Challenger to Champion: How SpiraPlan Outperforms JIRA+PluginsInflectra
 
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...Product School
 
Power of 2024 - WITforce Odyssey.pptx.pdf
Power of 2024 - WITforce Odyssey.pptx.pdfPower of 2024 - WITforce Odyssey.pptx.pdf
Power of 2024 - WITforce Odyssey.pptx.pdfkatalinjordans1
 
Imaging and Design for the Online Environment Part 1.pptx
Imaging and Design for the Online Environment Part 1.pptxImaging and Design for the Online Environment Part 1.pptx
Imaging and Design for the Online Environment Part 1.pptxPower Point
 
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Product School
 
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...MarcovanHurne2
 
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...Product School
 
Introduction to Multimodal LLMs with LLaVA
Introduction to Multimodal LLMs with LLaVAIntroduction to Multimodal LLMs with LLaVA
Introduction to Multimodal LLMs with LLaVARobert McDermott
 
My Journey towards Artificial Intelligence
My Journey towards Artificial IntelligenceMy Journey towards Artificial Intelligence
My Journey towards Artificial IntelligenceVijayananda Mohire
 
"AIRe - AI Reliability Engineering", Denys Vasyliev
"AIRe - AI Reliability Engineering", Denys Vasyliev"AIRe - AI Reliability Engineering", Denys Vasyliev
"AIRe - AI Reliability Engineering", Denys VasylievFwdays
 

Recently uploaded (20)

Confoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceConfoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data science
 
In sharing we trust. Taking advantage of a diverse consortium to build a tran...
In sharing we trust. Taking advantage of a diverse consortium to build a tran...In sharing we trust. Taking advantage of a diverse consortium to build a tran...
In sharing we trust. Taking advantage of a diverse consortium to build a tran...
 
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
 
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
 
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google
"The Transformative Power of AI and Open Challenges" by Dr. Manish Gupta, Google
 
Apex Replay Debugger and Salesforce Platform Events.pptx
Apex Replay Debugger and Salesforce Platform Events.pptxApex Replay Debugger and Salesforce Platform Events.pptx
Apex Replay Debugger and Salesforce Platform Events.pptx
 
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24
Progress Report: Ministry of IT under Dr. Umar Saif Aug 23-Feb'24
 
AI Act & Standardization: UNINFO involvement
AI Act & Standardization: UNINFO involvementAI Act & Standardization: UNINFO involvement
AI Act & Standardization: UNINFO involvement
 
Campotel: Telecommunications Infra and Network Builder - Company Profile
Campotel: Telecommunications Infra and Network Builder - Company ProfileCampotel: Telecommunications Infra and Network Builder - Company Profile
Campotel: Telecommunications Infra and Network Builder - Company Profile
 
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
 
From Challenger to Champion: How SpiraPlan Outperforms JIRA+Plugins
From Challenger to Champion: How SpiraPlan Outperforms JIRA+PluginsFrom Challenger to Champion: How SpiraPlan Outperforms JIRA+Plugins
From Challenger to Champion: How SpiraPlan Outperforms JIRA+Plugins
 
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...
Harnessing the Power of GenAI for Exceptional Product Outcomes by Booking.com...
 
Power of 2024 - WITforce Odyssey.pptx.pdf
Power of 2024 - WITforce Odyssey.pptx.pdfPower of 2024 - WITforce Odyssey.pptx.pdf
Power of 2024 - WITforce Odyssey.pptx.pdf
 
Imaging and Design for the Online Environment Part 1.pptx
Imaging and Design for the Online Environment Part 1.pptxImaging and Design for the Online Environment Part 1.pptx
Imaging and Design for the Online Environment Part 1.pptx
 
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
 
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...
Digital Transformation Strategy & Plan Templates - www.beyondthecloud.digital...
 
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...
Synergy in Leadership and Product Excellence: A Blueprint for Growth by CPO, ...
 
Introduction to Multimodal LLMs with LLaVA
Introduction to Multimodal LLMs with LLaVAIntroduction to Multimodal LLMs with LLaVA
Introduction to Multimodal LLMs with LLaVA
 
My Journey towards Artificial Intelligence
My Journey towards Artificial IntelligenceMy Journey towards Artificial Intelligence
My Journey towards Artificial Intelligence
 
"AIRe - AI Reliability Engineering", Denys Vasyliev
"AIRe - AI Reliability Engineering", Denys Vasyliev"AIRe - AI Reliability Engineering", Denys Vasyliev
"AIRe - AI Reliability Engineering", Denys Vasyliev
 

Putting Phing to Work for You

  • 1. Putting Phing to Work for You Hans Lellelid International PHP Conference 2007-11-05
  • 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: Putting Phing to Work for You 2
  • 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) • http://phing.info/ Hans Lellelid: Putting Phing to Work for You 3
  • 4. Workshop Topics: Fundamentals • Phing basics • Creating a first build file • Transforming directories and files • Performing PDO tasks • Gathering user input • Building phpdoc • Running unit tests • Integrating with CI tools Hans Lellelid: Putting Phing to Work for You 4
  • 5. Workshop Topics: Extension • Using PHP code in a build file • Building a simple Task • Writing more complex Task • Creating a shared Type • Custom filters • Custom selectors • Custom logger/listener • Custom input handlers Hans Lellelid: Putting Phing to Work for You 5
  • 6. Getting Started Hans Lellelid: Putting Phing to Work for You 6
  • 7. Install Phing • Install via PEAR – pear channel-discover pear.phing.info – pear install phing/phing • Install “traditional” package – Available on Download page • Install from SVN – svn co http://svn.phing.info/trunk phing Hans Lellelid: Putting Phing to Work for You 7
  • 8. Following Along • Install via PEAR – pear install phing/phing – Install “traditional” package • Available on Download page – Install from SVN • svn co http://svn.phing.info/trunk phing Hans Lellelid: Putting Phing to Work for You 8
  • 9. The phing script • A wrapper shell script for phing.php script. • Sets default logger to use (dependent on system) • Typical usage: phing [target] • Other useful options: – Help (-h) – Specify properties (-Dpropname=value) – List targets (-l) – Get more output (-verbose or -debug) Hans Lellelid: Putting Phing to Work for You 9
  • 10. Buildfiles • Build files are XML • Build files are composed of: – Tasks: a “build-in” piece of code that a specific function. E.g. <mkdir> – Types: data structures that are used commonly by tasks. E.g. <path> – 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: Putting Phing to Work for You 10
  • 11. 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: Putting Phing to Work for You 11
  • 12. 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 – Represents directory and class name in a single string. Hans Lellelid: Putting Phing to Work for You 12
  • 13. Control Structures • depends, if, and unless attributes provide control over target execution condition and sequence. • <if> task provides a more familiar (to developers) control structure that can be used within a target. Hans Lellelid: Putting Phing to Work for You 13
  • 14. Reorganize, Transform Hans Lellelid: Putting Phing to Work for You 14
  • 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: Putting Phing to Work for You 15
  • 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: Putting Phing to Work for You 16
  • 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: Putting Phing to Work for You 17
  • 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: Putting Phing to Work for You 18
  • 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: Putting Phing to Work for You 19
  • 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: Putting Phing to Work for You 20
  • 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: Putting Phing to Work for You 21
  • 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: Putting Phing to Work for You 22
  • 23. Other Tasks Hans Lellelid: Putting Phing to Work for You 23
  • 24. PDO Task • <pdo> task allows you to execute SQL statements from – The buildfile itself – One or more files • Transactions can be explicitly demarcated. • Output can be formatted with a provided or custom formatter. Hans Lellelid: Putting Phing to Work for You 24
  • 25. User Input • The <propertyprompt> task provides an basic, easy way to set a value from user input. • The <input> task provides a more feature rich version. – Special handling of yes/no, multiple choice – Support for input validation Hans Lellelid: Putting Phing to Work for You 25
  • 26. Build API Docs • The <phpdoc> task provides a wrapper for the PhpDocumentor application. • A few advantages over standalone phpdoc: – Use properties from build script – Use Phing features like filesets Hans Lellelid: Putting Phing to Work for You 26
  • 27. 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: Putting Phing to Work for You 27
  • 28. Continuous Integration • Code -> Commit -> Build -> Test -> Report • CI tools watch the repository and provide automated building, testing, reporting. • CruiseControl is probably the most well- known. • Xinc provides CI tool functionality written in PHP. • Xinc is built to use Phing • CruiseControl also supports Phing Hans Lellelid: Putting Phing to Work for You 28
  • 29. Extending Phing Hans Lellelid: Putting Phing to Work for You 29
  • 30. 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) – Input Handler Hans Lellelid: Putting Phing to Work for You 30
  • 31. 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: Putting Phing to Work for You 31
  • 32. Writing a Task • Extend Task • Add setter methods for any params your task accepts. • Implement public function main() • Abstract subclasses exist to make life easier (e.g. MatchingTask) Hans Lellelid: Putting Phing to Work for You 32
  • 33. 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: Putting Phing to Work for You 33
  • 34. More Complex Task • Adding support for CDATA text. • Adding support for Fileset, Filelist, Filterchain child elements. • Supporting nested arbitrary classes ... Hans Lellelid: Putting Phing to Work for You 34
  • 35. Data Types • Classes that can be shared by different tasks. • Extend DataType • Add setter methods for any params your data type accepts/expects. Hans Lellelid: Putting Phing to Work for You 35
  • 36. Filters • Extend BaseFilterReader or BaseParamFilterReader and implement ChainableReader. • Implement read() and chain() methods. – Read stream and return -1 when stream is exhausted. • If using params, you must initialize them locally. • Use <filterreader classname=”YourClass”> in your build file. Hans Lellelid: Putting Phing to Work for You 36
  • 37. Selectors • Extend BaseExtendSelector • Implement isSelected() • Use <custom> tag in your build file. Hans Lellelid: Putting Phing to Work for You 37
  • 38. Mappers • Implement FileNameMapper • Implement main(filename), setFrom(str), setTo(str) • Use <mapper classname=”...”> in your build file. Hans Lellelid: Putting Phing to Work for You 38
  • 39. Build Listeners • Implement BuildListener (or BuildLogger which expects streams) • Register on the commandline using -listener (or -logger) option. Hans Lellelid: Putting Phing to Work for You 39
  • 40. Input Handlers • Implement InputHandler interface – Implement the handleInput(InputRequest) method. • Register on the commandline using -listener (or -inputhandler) option. Hans Lellelid: Putting Phing to Work for You 40
  • 41. 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: Putting Phing to Work for You 41