The PEAR installer transforms a PEAR package from an inert grouping of files into a dynamic unit of software, and is itself a PEAR Package It is a very powerful application, and this book will open up the possibilities of this power to you, as you will learn about its working and see its potential in action This book is a comprehensive and well-structured tutorial on using the PEAR installer, but is also much more than that As the creator of the latest versions of the PEAR installer (1.4.0+), the author is passionate about the benefits of a well managed development and deployment process The book shows how PEAR installer works in detail, and then takes you through a comprehensive tour of how you can apply it to all stages of the development lifecycle, with practical examples and advice throughout It will build your technical skills and understanding, and also widen your perspective on managing an effective development process What you will learn from this book • • • • • What the PEAR installer is, and what it can for you Organizing your code into packages using the package.xml format Using the PEAR installer to bring the power of versioning and rollbacks to your live website Setting up your own PEAR channel for distributing your PHP applications Embedding the PEAR installer inside your own web application to manage plug-ins from a remote server The book is not just for PHP developers who want to understand how the PEAR installer works and what it can for them, but more generally for PHP developers seeking a better way to deploy their applications and manage updates It does assume that you have a good working knowledge of PHP development, and are dealing with projects of a sufficient scale and complexity to warrant an investment in a structure process $ 44.99 US £ 27.99 UK € 41.99 EU Prices not include local sales tax or VAT where applicable Packt Publishing Birmingham - Mumbai Gregory Beaver Who this book is written for PEAR Installer Manifesto The PEAR Installer Manifesto The PEAR is the PHP Extension and Application Repository, and its primary purpose is to support code re-use PEAR provides both an advanced installer and a code repository at http://pear.php.net PEAR code is organized into discrete re-usable components called packages, which consist of a group of files and a descriptor file called package.xml that contains metadata about the package contents F r o m T e c h n o l o g i e s t o S o l u t i o n s The PEAR Installer Manifesto Revolutionizing PHP Application Development and Deployment The creator of the latest innovations in this powerful code management and deployment system shows you how to unleash its hidden power across your complete PHP development lifecycle www.packtpub.com Gregory Beaver The PEAR Installer Manifesto Revolutionizing PHP Application Development and Deployment The creator of the latest innovations in this powerful code management and deployment system shows you how to unleash its hidden power across your complete PHP development lifecycle Gregory Beaver BIRMINGHAM - MUMBAI The PEAR Installer Manifesto Revolutionizing PHP Application Development and Deployment Copyright © 2006 Packt Publishing All rights reserved No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However, the information contained in this book is sold without warranty, either express or implied Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals However, Packt Publishing cannot guarantee the accuracy of this information First published: October 2006 Production Reference: 1201006 Published by Packt Publishing Ltd 32 Lincoln Road Olton Birmingham, B27 6PA, UK ISBN 1-904811-19-1 www.packtpub.com Cover Image by www.visionwt.com Credits Author Gregory Beaver Reviewers Sebastian Bergmann Editorial Manager Dipali Chittar Indexer Mithil Kulkarni Lukas Kahwe Smith Proofreader Development Editor Chris Smith Douglas Paterson Layouts and Illustrations Technical Editors Shantanu Zagade Divya Menon Saurabh Singh Cover Designer Shantanu Zagade About the Author Gregory Beaver has been one of the most active contributors to open-source PHP development since 2001 As the primary developer of important infrastructure software such as phpDocumentor, the PEAR installer, PHP_Archive, PHP_LexerGenerator, and PHP_ParserGenerator as well as co-lead of the Phar PHP extension, Gregory has helped to ease the development needs of PHP developers around the world After he transformed phpDocumentor from a small project into the most advanced auto-documentation tools for PHP, phpDocumentor was voted second best PHP tool in Germany-based PHP Magazin's 2003 Reader's Choice awards list for best PHP application, and voted third best PEAR package (http://tinyurl.com/bn7pb) Currently, he is working to refactor the PEAR installer for PHP 6, as well as helping to lead the PEAR community forward Gregory blogs about his programming escapades and other news on his blog, Lot 49 (http://greg.chiaraquartet net) Gregory also leads a mysterious double life as the cellist of the internationally renowned Chiara String Quartet (http://www.chiaraquartet.net) with whom he tours the world He lives in Lincoln, Nebraska where he is a full-time lecturer/ artist-in-residence at the University of Nebraska-Lincoln Hixson-Lied College of Fine Arts To Julie, who does not love PHP, but loves me anyways About the Reviewers Sebastian Bergmann is a long-time contributor to various PHP projects, including PHP itself He is currently working at eZ systems AS in Skien, Norway on the Workflow Management component for the eZ platform As the developer of PHPUnit, he also helps with testing the eZ components In his free time he likes to hack on Open Source software and to take photographs, preferably while travelling the world Lukas Kahwe Smith has been developing PHP since 2000 and joined the PEAR repository in 2001 Since then he has developed and maintained several PEAR packages, most notably MDB2 and LiveUser and has influenced the organization of the project itself as a founding member of the PEAR Group steering committee and QA core team Aside from several magazine publications, he is a well-known speaker at various international PHP conferences Table of Contents Preface Chapter 1: Acquiring PEAR: What is it and How I Get It? A Democratic Innovation for PHP: PEAR Channels What is PEAR? A Code Repository or an Installer? PEAR Package Repository and PEAR Channel PEAR Installer Installing the PEAR Installer PEAR Bundled with PHP Installation for PHP Versions Older than 5.1.0 Other Unofficial Sources Synchronizing to a Server with no Shell Access Using PEAR_RemoteInstaller Summary Chapter 2: Mastering PHP Software Management with the PEAR Installer Distributing Libraries and Applications Differences between Libraries and Applications from the Installer's Point of View Using Versioning and Dependencies to Help Track and Eliminate Bugs Versioning PEAR Packaging and Strict Version Validation Enterprise-Level Dependency Management Distribution and Upgrades for the End User An Overview of package.xml Structure Tags Shared between package.xml 1.0 and 2.0 Package Metadata Package Name/Channel Maintainers (Authors) Package Description and Summary 9 10 12 12 15 17 18 22 23 25 26 27 27 29 32 34 36 44 44 45 46 47 Table of Contents Basic Release Metadata 48 Package Version Package Stability External Dependencies Release Notes Release License Changelog File List, or Contents of the Package New Tags in package.xml File/Directory Attributes: name, role, and baseinstalldir Summary 48 49 51 58 58 58 59 60 63 66 Chapter 3: Leveraging Full Application Support with the PEAR Installer 69 Creating PEAR_Installer_Role_Chiaramdb2schema Custom Role Full Range of Possible Custom File Roles 76 81 package.xml Version 2.0: Your Sexy New Friend PEAR Channels: A Revolution in PHP Installation Application Support Introduction to Custom File Roles Introduction to Custom File Tasks Creating the PEAR_Task_Chiara_Managedb Custom Task The Full Range of Possible Custom File Tasks 69 70 72 73 83 87 96 Post-Installation Scripts for Ultimate Customization Bundling Several Packages into a Single Archive Backwards Compatibility: Using package.xml 1.0 and 2.0 Why Support Old and Crusty package.xml 1.0? Case Study: The PEAR Package PEAR_PackageFileManager Obtaining PEAR_PackageFileManager PEAR_PackageFileManager Script and the package.xml Files it Generates How PEAR_PackageFileManager Makes a Hard Life Easy 119 129 Creating a Package for Installation with the PEAR Installer Summary 132 133 Globbing Files for package.xml Managing Changelog Synchronizing package.xml Version 1.0 and package.xml Version 2.0 99 115 116 117 118 119 119 129 130 131 Chapter 4: Clever Website Coordination Using the PEAR Installer 135 Overview of the Problem Understanding the Problem Managing Code Breakage and Reverting to Previous Versions Managing Missing or Extraneous Files [ ii ] 135 136 137 138 Table of Contents Coordinating Development with a Team of Developers Backing Up Code: Redundancy as a Necessary Precaution The Solution, Part I: All-Important Source Control Providing Redundancy and Revision History Installing CVS or Subversion Concurrent Versions System Subversion Intelligent Source Control Maintaining Branches for Complex Versioning Support Using Tags to Mark Point Releases 139 140 140 141 141 142 145 148 148 149 The Solution, Part II: Using the PEAR Installer to Update the Website Generating package.xml from the Source Control Checkout Packaging: Coordinating Release Versions with Tags and Branches Testing the Release before Uploading Upgrading the Live Server 150 154 160 161 164 Summary 168 Using the pear upgrade Command The Real Beauty of Using Pear to Fix Problems Chapter 5: Releasing to the World: PEAR Channels Distributing a package.xml-Based Package Distributing Packages through a Channel Server The channel.xml File channel.xml Tag Summary Obtaining Chiara_PEAR_Server Configuring the Server; Obtaining a Front End for End Users Adding a Package and Releasing Packages Installing a Public Channel Front End Distributing Pay-For-Use PHP Applications through a Channel Distributing Packages through Static tarballs for Single-Client Installations Who Needs this Feature? Differences in package.xml and Dependencies Releasing Equals Uploading Security Issues Inherent in Remote Installation How PEAR Installer and Chiara_PEAR_Server Provide Security? Extra Security beyond what PEAR Provides Specific Security Principles Applied in Designing the PEAR Installer and Chiara_PEAR_Server Summary [ iii ] 166 167 169 170 173 174 176 182 183 185 188 191 197 197 197 199 200 201 201 202 204 Embedding the PEAR Installer: Designing a Custom Plug-In System MyBlog pear.chiaraquartet.net 0.1.0 0.1.0 Whereas package.xml (version 2.0.0) has this required dependency in it: MyBlog pear.chiaraquartet.net 0.2.0 0.2.0 These dependencies ensure that the templates are only available for blog versions they are compatible with As such, if you decide to adopt this model, you'll need to ensure that all templates are released with a element in their dependency on the blog, defining the highest version they are known to work with As new versions are released, the templates can be released with updated tags, or modified and then released In this way, working templates will always be available for the differing blog versions In short: complexity is all managed by the internals of the PEAR installer, freeing you to write great programs! Improvements for the Ambitious One of the vexing problems of all web-based plug-in installation systems involves security of directory permissions In order to install something, the web server's user (nobody or apache are common web users) must have write access to the plug-in directory This means that anyone with an account on the machine and a public web page can write and read from your application's plug-in directory, simply by creating a web page that does this In our sample MyBlog, I made the dubious assumption that you are the sole owner of the blog server and not need to worry about such issues, and did not implement a system for this important security issue However, there is a simple solution that requires a bit of work, and is a wonderful exercise for the ambitious The trick is to provide a link on the page that is a little lock The user must unlock the directory prior to installation, and it must be locked after [ 272 ] Chapter Locking the page consists of recursively iterating over the internal plug-in directory, and running this simple command: chmod($file_or_dir, 0444); Unlocking is its opposite, recursively iterating over the internal plug-in directory and running this simple command: chmod($file_or_dir, 0777); Why, you might ask, are there no blog or other applications performing this task? There are several answers First of all, the same task can be accomplished quite easily using a shell script In other words "let the user take care of their own dang security." Also, this particular security issue simply hasn't been on the radar because it requires a malicious hacker to already have access to the machine to take advantage of it—or so one would think The fact is, if the application happens to have a PHP code injection vulnerability, this would allow a malicious hacker to inject code that creates a malicious PHP script on the server, thereby gaining control over the server through the fact that the plug-in directory is writeable! Although it takes a very, very serious vulnerability to become a problem, having writeable directories can make the difference between having and losing control over a production server Keep this in mind as you develop—security is always an important task! Try to think like an evildoer as you design, and you will have (and cause) far fewer security vulnerabilities Summary This chapter has been quite a ride In it, we investigated common practice methods for embedding plug-ins into web applications Specifically, we examined three examples—MDB2 (subpackages), Serendipity (Spartacus), Seagull (partially embedded PEAR installer) For each of these examples, we weighed the pros and cons of their respective approaches Having determined that there may be a better way to things, we learned how to embed the PEAR installer most effectively, in order to create a plug-in manager For this purpose, we created a fake blog program in just under 1000 lines of code that provides the ability to seamlessly query a remote PEAR Channel server designed to distribute templates Using the internal classes of the PEAR installer, our MyBlog web application can intelligently install and upgrade templates with all of the sophistication expected from the PEAR installer [ 273 ] Embedding the PEAR Installer: Designing a Custom Plug-In System We took full advantage of the PEAR installer's built-in REST client to query the remote server, the PEAR installer's download capabilities, and its robust file installer complete with file transactions In addition, we learned how to extend the remote server's REST code to include a thumbnail image, and instructed our MyBlog's administration page to display these thumbnail images Finally, I would like to thank you for reading this guide to the exciting and innovative PEAR installer, and I hope it will serve you well in your quest for the perfect website and developing environment! [ 274 ] Moodle 1.9 Multimedia ISBN: 978-1-847195-90-6 Paperback: 325 pages Create and share multimedia learning materials in your Moodle courses Ideas and best practices for teachers and trainers on using multimedia effectively in Moodle Ample screenshots and clear explanations to facilitate learning Covers working with TeacherTube, embedding interactive Flash games, podcasting, and more Create instructional materials and design students’ activities around multimedia A step-by-step approach where the reader is taken through examples Apache Struts Web Application Development ISBN: 978-1-847193-39-1 Paperback: 300 pages A beginner's guide for Java developers Design, develop, test, and deploy your web applications using Struts framework No prior knowledge of JavaScript and CSS is required Apply the best of agile development techniques and TDD techniques Step-by-step instructions and careful explanations with lots of code examples Please check www.PacktPub.com for information on our titles Index B branches managing for complex versioning support 148 C case study, Pear package 118 channel.xml file package distribution through channel server 174 tags 174, 175 tag summary 176-178, 182 Chiara_PEAR_Server package about 173 administrator login 186 configuring 183-185 configuring, PEAR installer used 184, 185 front-end 185 installing 182, 183 links for configuring channels 186 maintainers, creating 187, 188 packages, creating 186, 187 prerequisites for installing 182 security, providing 201, 202 security principles applied in designing 202-204 Chiara String Quartet website about 150 code handling 152 configuration variables 152 configuration variables, on development server 153 configuration variables, on live server 153 CVS tagging 161 live host name, adding 152 package.xml, generating 154 packages 151 packaging into PEAR packages 160 PEAR installer file roles, creating 152 release, testing before uploading 161, 162, 164 standard library packages and website, difference 154 sub-sites 150, 151 upgrading package on remote server 160 CLI versus Web/Gtk2 Installer 24 Concurrent Versioning System See CVS Crtx_PEAR_Channel_Frontend package about 188 configuring 189 front-end PHP file, creating 189-191 installing 189 custom file roles about 72 characteristics, roles 74 code for PHP role 74, 75 configuration entries 25 configuration value for each role 64 configuration variables 74, 77, 78 introduction 73 list 64 naming conventions 73 PEAR_Installer_Role_Chiaramdb2schema, creating 76 PHP file role 25 role configuration variable mapping 74 tags for PHP role 76 xml file for PHP role 75 custom file tasks about 73 constraint 84 init($xml, $fileAttributes, $lastVersion) method 98 installation phase 84 introduction 83 methods available 96 multiple tasks 84 naming conventions 73 ordering 84 PEAR_Task_Chiara_Managedb 87 post-installation scripts 99 run($tasks) method 99 sample task XML and $xml variable content, mapping 97 script tasks 84 single tasks 84 source code for windowseol task 85-87 startSession($pkg, $contents, $dest) method 98 types 84 uses 84 validXml($pkg, $xml, &$config, $fileXml) method 96 custom plug-in systems about 214, 215 case study 215 Seagull Framework 219 Serendipity blog 215 CVS about 140, 142 CVS repository, setting up 143-145 CVSROOT 143 downloading 142 limitations 141 logging to CVS server 142, 143 PHP repository 142 TortoiseCVS 143 uses 142 working 140, 141 CVS and Subversion difference 141, 145, 151 D discrete packaging 139 F File conflict resolution 140 L lightweight installer plug-in administratice control center 269 designing 239 MyBlog, post install script 258, 259, 261-263 MyBlog_Template_Config 240, 241 MyBlog_Template_Fetcher 253, 255, 256, 258 MyBlog_Template_IConfig 240, 241 MyBlog_Template_Lister 248-250, 252 MyBlog_Template_REST 241, 242, 244, 245, 247, 248 MyBlog class 265 MyBlogdirectory tree 239 MyBlog package 264 PEAR, embedding 240 live server upgrading 164, 165 upgrading, pear upgrade command used 166, 167 M MDB2 about 210 case study 210-214 drawbacks 211 package.xml 211, 213, 214 meta-data, package.xml basic release 48 legal stabilities, API 51 package stability 49, 50 package version 48, 49 MyBlog administratice control center 269 administration page 206, 207 class 265 code 205 custom plug-in system 205 improovements 272, 273 [ 276 ] main blog file 265 MyBlog_Template_Config 240, 241 MyBlog_Template_Fetcher 253, 255, 256, 258 MyBlog_Template_IConfig 240, 241 MyBlog_Template_Lister 248-252 MyBlog_Template_REST 241, 243, 245, 247 package 264 package.xml files 271 PEAR installer used 205 post-install script 258, 259, 261-263 Savant3 package 265 templates, displaying 266 templates, installing 267-269 P package about abstract packages 171 abstract packages, converting to physical URLs 171 building into single archive, package.xml 115, 116 Chiara_PEAR_Server package 173 creating, for installation with PEAR installer 132, 133 Crtx_PEAR_Channel_Frontend package 188 distributing, approaches 170 distributing, before PEAR 1.4.0 170 distributing, PEAR installer used 170 package.xml based package, distributing 170 PEAR_PackageFileManager 119 remote package, installing with PEAR installer 171 package.xml contents in sub-packages 158 creating 154-156 dependencies 33 dependencies, adding in sub-packages 158 displaying for error checking 159 generating 154 generation script for website 154 importing from existing package.xml 155, 156 package, distributing 170 package distributing, approaches 170 package distributing, before PEAR 1.4.0 170 package distributing, PEAR installer used 170 packages, bundling into single archive 115, 116 PEAR channels 70 post-installation scripts 99, 101, 102 remote package, installing with PEAR installer 171 replacement tasks, adding to files 157 structure, overview 36, 38, 40, 41, 43, 44 validXml($pkg, $xml, &$config, $fileXml) method 96 version 1.o, supporting 117 version 2.0 69 versions 1.0 and 2.0 44 versions for each sub-packages 155 package.xml, versions 1.0 and 2.0 authors 46 changelog format 58, 59 compatibility 116, 117 dependencies 51, 54 dependencies, managing trust 55, 56 dependencies structure 51 design flaws 52, 53 directory attributes 63, 65 file attributes 63, 65 file list 59, 60 maintainers 46 meta-data 48 new tags 60, 61, 63 package contents 59, 60 package description 47 package metadata 44 package name/channel 45 package summary 47 PECL packages, depending on 57 release license 58 release notes 58 role attribute 64 [ 277 ] synchronizing 131, 132 tags shared 44 version 1.o, supporting 117 XML validation, simplifying 53, 54 package distributing, for single client installations about 197 need for 197 package.xml and dependencies, difference 197, 199 static tarballs used 197 static tarballs used, advantages 199 package distributing, through channel server about 173 channel.xml file 174 PEAR channels 169 code repository or installer configuration 25 dependencies 32 dependencies for version 1.4.3 172 embedding with framework 207, 208 installing libraries and applications, difference 26 package repository PEAR_PackageFileManager 119 security issues 200 upgrading 26 version 1.4.3, installing 172 versioning time versus absolute time 28 versions 169 versions, organised 172 PEAR_Config class about 226 configuration values 227 object 226 template package 227 PEAR_Dependency2 class about 228 dependencies, array 229 error handling 229 package dependencies, accessing 230, 231 uses 228 validation methods 229 PEAR_Installer_Role_Chiaramdb2schema Chiaramdb2schema.xml 77, 80 configuration variables 77, 78, 82 creating 76 MDB2-based schema files 78 package.xml validation 76 parameters, setup() method 81 setup() method 81 tags, package.xml 76 PEAR_Installer class about 236 templates installing 237 PEAR_PackageFileManager about 119 changelog, managing 130 need for 130 obtaining 119 package.xml 119 package.xml, generating 123, 125, 127-129 package.xml 2.0, generating with post-installation script 120, 122, 123 package.xml files, globbing 129 script 119 uses 129 PEAR_REST class about 231 methods 231 PEAR_REST_10 231-233 PEAR_REST_11 231 PEAR_Task_Chiara_Managedb custom task chiaramdb2schema role 88 configuration variables, database connection 90, 92, 93 creating 87 DSN variable 89, 90, 92 initialization method, database connection 89 MDB2_Schema package 88, 96 package-specific DSNs 93 post-installation scripts 102, 103, 104, 106-108 startSession() method 94 tasks 87, 88 XML validation method 89 PEAR channel-based plug-in systems about 224 channel.xml file 225 classes, creating 225 designing 224 [ 278 ] existing functionality, reusing 225 extending REST with custom information 238, 239 MyBlog 224 MyBlog template system, requirements 224, 225 PEAR installer infrastructure 226 template installer 224 PEAR channels about 8, 10, 70, 169 channel.xml file 174 channel aggregators cross-channel dependencies 169 location 176 packages, installing 70 packages, upgrading 170 packages for installation, PEAR installer used 169 pay-for-use PHP applications, distributing 191 pear.php.net 71 pear.php.net and pecl.php.net 32 PEAR installer 70 PEAR package repository prominent channels server name to channel name, switching 72 uses 70 validation packages 177 PEAR channel servers 24 PEAR Downloader about 234 installable packages 234 methods, PEAR_Downloader_Package 234, 235 options for designing embedded PEAR installer 235 PEAR_Downloader_Package 234 PEAR installer about abstract task oriented sections 10 advantages applications, distributing 25 application support 72 bugs, tracking and eliminating 27 channel.xml file 174 code, backing up 140 code breakage, managing 137 [ 279 ] DB_DataObject, installing 21 dependencies 32, 33 dependencies for version 1.4.3 172 design goals 23 disadvantages Discrete packaging 139 embedding with framework 207, 208 embedding with framework, eliminating errors 208 embedding with framework, uses 208 external dependencies 51 feature 24 features for, managing missing files 138 files, installing 25 file transactions feature 139 HTML_QuickForm package HTTP authentication 191, 193, 194, 196 infrastructure 226 installation errors 21 installing 12 installing, unofficial sources 17 installing, with PHP 12, 13, 15 installing for PHP versions older than 5.1.0 15, 16 installing on server 18, 20, 21 libraries, distributing 25 libraries and applications, difference 26 missing files, managing 138, 139 new features, application development 27 package, creating 11 package, distributing 11 package.xml file 23 package creating, for installation with PEAR installer 132, 133 packaging into PEAR packages 160 path structure, accessing REST 1.0 180, 181 pay-for-use PHP applications, distributing 191 PEAR_RemoteInstaller, installing 18, 20 PEAR_RemoteInstaller package 18 PEAR_Validate class 30 PEAR channels 8, 70 PEAR channel servers 24 PEAR packages, distribution 34 PEAR packages, upgrading 35 post-installation scripts 99 protocols 179 restrictive dependencies 51 rsync method 22 script for get file 191, 193-195 security, providing 201, 202 security principles applied in designing 202-204 uses 23 version 1.4.3, installing 172 versioning 27, 28 versioning feature 138 versions, examining 172 version validation 29, 30, 32 website, updating 150 website coordination 135 website development, coordinating 139 PEAR installer infrastructure PEAR_Config class 226 PEAR_Dependency2 class 228 PEAR_Downloader_Package 234 PEAR_Installer class 236 PEAR_REST 231 PEAR_REST_10/PEAR_REST_11 231 PEAR Downloader 233 PEAR package repository about base classes history packages 10 versioning protocol 29 PEAR packages case study 118 DB database abstraction package HTML_QuickForm package installing PEAR_RemoteInstaller package 18 PHP software installing plug-in systems about 208 bundling in source code 209 custom plug-in systems 214 lightweight installer plug-in 239 PEAR channel-based 224 subpackages 209 post-installation scripts components 110 default values of parameters, modifying 111 methods 110 package.xml 99, 101, 102 PEAR_Task_Chiara_Managedb Custom Task 102-108 postProcessPrompts() method 111, 113, 114 prompt, modifying 111, 112 run() method 114 R RCS See revision control systems REST 182 extending with custom information 238, 239 revision control systems about 140 CVS 140 installing 141 prerequisites for installing 141, 142 subversion 140 S scalability 137 Seagull Framework about 219 case study 219 channels used 222 output capturing 224 PEAR’s abstract command interface 222, 223 PEAR_Frontend_Web package 222 PEAR installer, embedded 219, 221 PearMgr.php file 222 PEAR packages, used 220 Role_Web package 221 Serendipity blog about 215 case study 215 methods, Spartacus plug-in manager 216, 217 plug-ins, downloading 218 plug-ins installation checking, for displaying metadata 218 [ 280 ] problems 219 Spartacus plug-in manager 215 structure, Spartacus plug-in manager 216 URLs, constructing for plug-ins metadata 217 ViewCVS trick 219 SOAP 171, 176 source control systems about 141 branches, managing for complex versioning support 148 intelligent source control systems 148 tags, used for marking point releases 149 subpackages about 209 drawbacks 214, 215 MDB2 package 210 PEAR dependencies 209 Subversion about 145 advantages over CVS 141 Subversion repository, setting up 147 tags and branches 149 T tags 149 U website Concurrent Versions System 135, 136 packaging into PEAR packages 160 pear upgrade command used 167 problems evolved 135 problems evolved in website development 137 problem solving, PEAR installer used 135, 136 release, testing before uploading 161, 162, 164 roadmap 136 structure 135 Uniform Modelling Language 150 updating 150 upgrading package on remote server 160 website development code, backing up 140 code breakage, managing 137 code breakage solving, PEAR installer used 137 coordinating 139 extraneous files, managing 138 File conflict resolution 140 missing files, managing 138 previous versions, reverting to 137 rsync command 138 understanding the problems 136, 137 Uniform Modelling Language 150 X W XML-RPC functions 178, 179 [ 281 ] Thank you for buying The PEAR Installer Manifesto Packt Open Source Project Royalties When we sell a book written on an Open Source project, we pay a royalty directly to that project Therefore by purchasing The PEAR Installer Manifesto, Packt will have given some of the money received to the PEAR project In the long term, we see ourselves and you—customers and readers of our books—as part of the Open Source ecosystem, providing sustainable revenue for the projects we publish on Our aim at Packt is to establish publishing royalties as an essential part of the service and support a business model that sustains Open Source If you're working with an Open Source project that you would like us to publish on, and subsequently pay royalties to, please get in touch with us Writing for Packt We welcome all inquiries from people who are interested in authoring Book proposals should be sent to authors@packtpub.com If your book idea is still at an early stage and you would like to discuss it first before writing a formal book proposal, contact us; one of our commissioning editors will get in touch with you We're not just looking for published authors; if you have strong technical skills but no writing experience, our experienced editors can help you develop a writing career, or simply get some additional reward for your expertise About Packt Publishing Packt, pronounced 'packed', published its first book "Mastering phpMyAdmin for Effective MySQL Management" in April 2004 and subsequently continued to specialize in publishing highly focused books on specific technologies and solutions Our books and publications share the experiences of your fellow IT professionals in adapting and customizing today's systems, applications, and frameworks Our solution-based books give you the knowledge and power to customize the software and technologies you're using to get the job done Packt books are more specific and less general than the IT books you have seen in the past Our unique business model allows us to bring you more focused information, giving you more of what you need to know, and less of what you don't Packt is a modern, yet unique publishing company, which focuses on producing quality, cutting-edge books for communities of developers, administrators, and newbies alike For more information, please visit our website: www.PacktPub.com PHP Programming with PEAR ISBN: 1-904811-79-5 Paperback: 250 pages XML, Data, Dates, Web Services, and Web APIs Maximize your productivity through the use of proven, powerful, reusable PHP components In-depth coverage of a range of important PEAR packages Many code examples provide a clear and practical guidance Building Websites with Joomla! ISBN: 1-904811-94-9 Paperback: 250 pages A step by step tutorial to getting your Joomla! CMS website up fast Walk through each step in a friendly and accessible way Customize and extend your Joomla! site Get your Joomla! website up fast Please check www.PacktPub.com for information on our titles PHPEclipse: A User Guide ISBN: 1-904811-44-2 Paperback: 206 pages Take advantage of the leading open source integrated development environment to develop, organize, and debug your PHP web development projects Compact guide to using Eclipse and PHPEclipse for web development Slash development time by improving the efficiency of your PHP coding and organizing your projects in the PHPEclipse environment Learn to use Eclipse for debugging PHP applications, interfacing with databases, and managing source code No previous knowledge of Eclipse required AJAX and PHP: Building Responsive Web Applications ISBN: 1-904811-82-5 Paperback: 275 pages Enhance the user experience of your PHP website using AJAX with this practical tutorial featuring detailed case studies Build a solid foundation for your next generation of web applications Use better JavaScript code to enable powerful web features Leverage the power of PHP and MySQL to create powerful back-end functionality and make it work in harmony with the smart AJAX client Go through case studies that demonstrate how to implement AJAX-enabled features in your site Please check www.PacktPub.com for information on our titles ... $ php go -pear. php Welcome to go -pear! Go -pear will install the 'pear' command and all the files needed by it This command is your tool for PEAR installation and maintenance Use 'php go -pear. php. .. http:/ /pear. php. net/go -pear in any web browser and save it to disk as go -pear. php, or if on Unix, then you have the wget command: $ wget –O go -pear. php http:/ /pear. php. net/go -pear Once you have go -pear. php. . .The PEAR Installer Manifesto Revolutionizing PHP Application Development and Deployment The creator of the latest innovations in this powerful code management and deployment system