Contents
Introduction
Part I: Getting Up and Running with PHP
Chapter 1: Introducing PHP
What Is PHP?
Why Use PHP?
The Evolution of PHP
What’s New in PHP 5.3
Summary
Chapter 2: Your First PHP Script
Installing PHP
Other Ways to Run PHP
Creating Your First Script
Summary
Exercise
Part II: Learning the Language
Chapter 3: PHP Language Basics
Using Variables in PHP
Understanding Data Types
Operators and Expressions
Constants
Summary
Exercises
Chapter 4: Decisions and Loops
Making Decisions
Doing Repetitive Tasks with Looping
Mixing Decisions and Looping with HTML
Summary
Exercises
Chapter 5: Strings
Creating and Accessing Strings
Searching Strings
Replacing Text within Strings
Dealing with Upper- and Lowercase
Formatting Strings
Summary
Exercises
Chapter 6: Arrays
The Anatomy of an Array
Creating Arrays
Accessing Array Elements
Looping Through Arrays with foreach
Working with Multidimensional Arrays
Manipulating Arrays
Summary
Exercises
Chapter 7: Functions
What Is a Function?
Why Functions Are Useful
Calling Functions
Working with Variable Functions
Writing Your Own Functions
Working with References
Writing Recursive Functions
Summary
Exercises
Chapter 8: Objects
What Is Object-Oriented Programming?
Advantages of OOP
Understanding Basic OOP Concepts
Creating Classes and Objects in PHP
Creating and Using Properties
Working with Methods
Object Overloading with —get(), —set(), and —call()
Using Inheritance to Extend the Power of Objects
Constructors and Destructors
Automatically Loading Class Files
Storing Objects as Strings
Determining an Object’s Class
Summary
Exercises
Part III: Using PHP in Practice
Chapter 9: Handling HTML Forms with PHP
How HTML Forms Work
Capturing Form Data with PHP
Dealing with Multi-Value Fields
Generating Web Forms with PHP
Storing PHP Variables in Forms
Creating File Upload Forms
Redirecting after a Form Submission
Summary
Exercises
Chapter 10: Preserving State With Query Strings, Cookies, and Sessions
Saving State with Query Strings
Working with Cookies
Using PHP Sessions to Store Data
Summary
Exercises
Chapter 11: Working with Files and Directories
Understanding Files and Directories
Getting Information on Files
Opening and Closing Files
Reading and Writing to Files
Working with File Permissions
Copying, Renaming, and Deleting Files
Working with Directories
Building a Text Editor
Summary
Exercise
Chapter 12: Introducing Databases and SQL
Deciding How to Store Data
Understanding Relational Databases
Setting Up MySQL
A Quick Play with MySQL
Connecting to MySQL from PHP
Summary
Exercises
Chapter 13: Retrieving Data from MySQL with PHP
Setting Up the Book Club Database
Retrieving Data with SELECT
Creating a Member Record Viewer
Summary
Exercises
Chapter 14: Manipulating MySQL Data with PHP
Inserting Records
Updating Records
Deleting Records
Building a Member Registration Application
Creating a Members’ Area
Creating a Member Manager Application
Summary
Exercises
Chapter 15: Making Your Job Easier with PEAR
Installing PEAR Packages
Using a PEAR Package
Creating HTML Tables with the HTML_Table Package
Web Forms the Easy Way with HTML_QuickForm
Summary
Exercises
Chapter 16: PHP and the Outside World
Working with Dates and Times
Working with HTTP
Getting Information from the Web Server
Sending Email
Summary
Exercises
Chapter 17: Generating Images with PHP
Basics of Computer Graphics
Creating Images
Manipulating Images
Using Text in Images
Summary
Exercises
Chapter 18: String Matching with Regular Expressions
What Is a Regular Expression?
Pattern Matching in PHP
Exploring Regular Expression Syntax
Finding Multiple Matches with preg_match_all()
Searching Arrays with preg_grep()
Replacing Text
Altering Matching Behavior with Pattern Modifiers
Splitting a String with a Regular Expression
Summary
Exercises
Chapter 19: Working with XML
What Is XML?
XML Document Structure
Reading XML Documents with PHP
Writing and Manipulating XML Documents with PHP
Doing XML the Easy Way with SimpleXML
Working with XSL and XSLT
Summary
Exercises
Chapter 20: Writing High-Quality Code
Writing Modular Code
Using Coding Standards for Consistency
Documenting Your Code
Checking Input and Encoding Output
Handling Errors
Separating Application Logic from Presentation Logic
Automated Code Testing with PHPUnit
Summary
Exercises
Appendix A: Solutions to Exercises
Appendix B: Configuring PHP
Appendix C: Alternatives to MySQL
Appendix D: Using PHP from the Command Line
Index
Wiley End User License Agreement
Beginning PHP 5.3
Published by
Wiley Publishing, Inc.
10475 Crosspoint Boulevard
Indianapolis, IN 46256
www.wiley.com
Copyright © 2010 by Wiley Publishing, Inc., Indianapolis, Indiana
ISBN: 978-0-470-41396-8
Library of Congress Control Number: 2009017149
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www.wiley.com/go/permissions.
Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional services. If professional assistance is required, the services of a competent professional person should be sought. Neither the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or Web site may provide or recommendations it may make. Further, readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Trademarks: Wiley and the Wiley logo are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. All other trademarks are the property of their respective owners. Wiley Publishing, Inc. is not associated with any product or vendor mentioned in this book.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books.
This book is dedicated to Cat, my rock in stormy seas, and Zack, my sunshine on a cloudy day.
About the Author
Matt Doyle, born and bred in England, discovered the joys of computing from an early age, thanks to his mom’s prudent decision to invest in a rusty old build-it-yourself computer with a whopping 4K of RAM. Since then, he’s never looked back, gaining a B.Sc. in Computer Science and moving into the IT industry.
After working at various companies in such disparate roles as IT manager, C programmer, software tester, Web designer, and Web developer, Matt decided it was time to start his own business. In 1997 he co-founded ELATED (www.elated.com)— a company dedicated to helping people build great Web sites.
Cutting his Web development teeth on C, Perl, and JavaScript, Matt has worked with a few other Web programming languages over the years, including Java, ASP, and Python. PHP is his current language of choice when building dynamic Web sites.
In 2002, deciding he’d had enough of the freezing English weather, he retreated to the sunny shores of Sydney’s Northern Beaches in Australia with his wife, Cat. They now live in the New South Wales Southern Highlands (which, ironically, has rather English weather) with their son, Isaac.
Credits
Executive Editor
Carol Long
Development Editor
Ed Connor
Technical Editor
Ben Schupak
Production Editor
Rebecca Anderson
Copy Editor
Kim Cofer
Editorial Manager
Mary Beth Wakefield
Production Manager
Tim Tate
Vice President and Executive Group Publisher
Richard Swadley
Vice President and Executive Publisher
Barry Pruett
Associate Publisher
Jim Minatel
Project Coordinator, Cover
Lynsey Stanford
Proofreader
Nate Pritts, Word One
Indexer
J & J Indexing
Cover Image
© Purestock/Punchstock
Acknowledgments
This book would not have been possible without the help and support of my wife Cat and my ELATED partner-in-crime Simon. Thank you both so very much for all that you have done. Thanks also go to the editors and managers at Wiley — particularly Ed Connor and Jenny Watson — for all their hard work helping to knock this book into shape.
Introduction
Welcome to Beginning PHP 5.3! This book teaches you how to build interactive Web sites and applications using PHP, one of the most popular Web programming languages in use today. Using PHP you can create anything from a simple form-to-email script all the way up to a Web forum application, a blogging platform, a content management system, or the next big Web 2.0 sensation. The sky is the limit!
As programming languages go, PHP is easy to learn. However, it’s also a very extensive language, with hundreds of built-in functions and thousands more available through add-ons to the PHP engine. This book doesn’t attempt to guide you through every nook and cranny of PHP’s capabilities. Instead, it aims to give you a good grounding in the most useful aspects of the language — the stuff you’ll use 99 percent of the time — and to teach you how to create solid, high-quality PHP applications.
Who This Book Is For
This book is intended for anyone starting out with PHP programming. If you’ve previously worked in another programming language such as Java, C#, or Perl, you’ll probably pick up the concepts in the earlier chapters quickly; however, the book assumes no prior experience of programming or of building Web applications.
That said, because PHP is primarily a Web technology, it will help if you have at least some knowledge of other Web technologies, particularly HTML and CSS. Fortunately, these two technologies are easy to pick up. You can find many useful HTML and CSS tutorials at:
- http://www.elated.com/articles/cat/authoring/ — HTML, XHTML, and CSS tutorials (many are written by the author of this book)
- http://www.w3schools.com/html/html_intro.asp — Walks you through the basics of HTML, with lots of “try it out” examples along the way
- http://www.w3schools.com/css/css_intro.asp — Brings you up to speed with CSS (Cascading Style Sheets)
Many Web applications make use of a database to store data, and this book contains three chapters on working with MySQL databases. Once again, if you’re already familiar with databases in general — and MySQL in particular — you’ll be able to fly through these chapters. However, even if you’ve never touched a database before in your life, you should still be able to pick up a working knowledge by reading through these chapters.
What This Book Covers
This book gives you a broad understanding of the PHP language and its associated technologies. You explore a wide range of topics, including:
- How to install and configure the PHP engine
- Language fundamentals, such as variables, loops, strings, and arrays
- Functions, and the concept of modular code
- How to develop object-oriented applications
- Creating Web forms, and PHP scripts to handle them
- Interacting with browser cookies and creating sessions to store visitor data
- File and directory handling
- Writing database-driven applications
- Dealing with dates and times, the Web server environment, and email messages
- Creating graphics with PHP
- The ins and outs of regular expressions
- How to read, write, and create XML documents with PHP
- Good programming practices, including coding standards, documentation, security issues, error handling, code separation, and code testing
- How to write PHP scripts that can run from the command line
Also, as you'd imagine, this book covers the new features added to PHP in version 5.3. However, if you're still using an older version of PHP, don't panic – the vast majority of the book applies to all versions of PHP.
How This Book Is Structured
The chapters in this book are laid out in a logical order, explaining basic programming concepts first, then building on those concepts in later chapters when covering more advanced topics. As a general rule, each chapter builds on the knowledge gained in previous chapters, so you shouldn’t need to jump around the book too much. However, if you’re already familiar with some of the basic ideas of PHP, you’ll find you can easily dip into later chapters if you’re looking for specific information.
Each chapter contains a couple of exercises at the end to test your knowledge and expand on some of the ideas presented in the chapter. You can find solutions to the exercises in Appendix A.
This book is split into three main parts. Part I, “Getting Up and Running with PHP,” introduces PHP in more detail, and walks you through installing PHP and writing a simple PHP script. Part II, “Learning the Language,” teaches you the fundamentals of the PHP language — essential reading for building PHP scripts. Finally, Part III, “Using PHP in Practice,” shows you how to create real-world PHP applications, covering a wide range of concepts and including lots of useful example scripts.
Here’s a chapter-by-chapter breakdown of the book to help you decide how best to approach it.
Chapter 1 introduces you to PHP. You see how PHP compares to other Web programming languages, look at how PHP has evolved over the years, and briefly explore the new features in PHP version 5.3.
Chapter 2 walks you through installing a copy of the PHP engine on Ubuntu Linux, Windows, and Mac OS X; looks at other ways you can install or use PHP; and shows you how to write a simple PHP script.
Chapter 3 looks at some basic PHP language concepts. You look at variables, data types, operators, expressions, and constants.
Chapter 4 shows you how to change the flow of your scripts by creating decisions and loops. You explore the if, else, and switch statements; the ternary operator; and the do, while, for, break, and continue statements. You also learn how to nest loops, and how to mix decisions and looping with blocks of HTML.
Chapter 5 explores PHP’s handling of strings, or sequences of characters. You learn how to create strings; how to retrieve characters from a string; and how to manipulate strings with functions such as strlen(), substr(), strstr(), strpos(), str_replace(), and printf(), to name but a few.
Chapter 6 covers arrays — variables that can hold multiple values. You learn the difference between indexed and associative arrays, and find out how to create arrays and access their individual elements. The rest of the chapter focuses on array manipulation, including functions such as print_r(), array_slice(), count(), sort(), array_merge(), and list(). You also learn how to create foreach loops, as well as how to work with multidimensional arrays.
Chapter 7 looks at the concept of functions — blocks of code that you can use again and again. You look at how to call built-in functions, and how to work with variable functions. You also study how to create your own functions, including defining parameters, returning values, understanding scope, and using anonymous functions. Other function-related topics such as references and recursion are also explored.
Chapter 8 delves into the world of object-oriented programming. You look at the advantages of an object-oriented approach, and learn how to build classes, properties, and methods, and how to create and use objects. You also explore more advanced topics such as overloading, inheritance, interfaces, constructors and destructors, autoloading, and namespaces.
Chapter 9 shows you how to use PHP to create interactive Web forms. You learn how to create HTML forms, how to capture form data in PHP, and how to use PHP to generate dynamic forms. You also explore file upload forms and page redirection.
Chapter 10 looks at how to preserve an application’s state between page views. You explore three different strategies: query strings, cookies, and PHP sessions. The chapter includes an example user login system.
Chapter 11 takes a look at PHP’s file and directory handling functions. You learn how to open and close files; how to find out more information about a file; how to read from and write to files; how to work with file permissions; how to copy, rename, and delete files; and how to manipulate directories. The chapter includes a simple text editor as an example.
Chapters 12–14 explore databases in general and MySQL in particular, and show how to work with MySQL databases using PHP. You learn some database and SQL theory; look at how to connect to MySQL from PHP; and study how to retrieve, insert, update, and delete data in a MySQL database.
Chapter 15 introduces PEAR, the PHP Extension and Application Repository. It’s a large collection of reusable code modules that can really help to speed up your application development. You look at how to install and use PEAR packages, and explore three useful packages: Net_UserAgent_Detect, HTML_Table, and HTML_QuickForm.
Chapter 16 looks at various ways that your PHP applications can interact with the outside world. You take a detailed look at date and time handling, including various useful built-in date functions, as well as the DateTime and DateTimeZone classes. You also look at how to work closely with HTTP request and response headers, how to retrieve Web server information, and how to send email from within your scripts.
Chapter 17 shows how you can use PHP to generate graphics on the fly. You study some computer graphics fundamentals, then look at how to create new images, as well as modify existing images. Along the way you explore colors, drawing functions, image formats, transparency, opacity, and generating text within images.
Chapter 18 looks at the power of regular expressions. These clever pattern-matching tools let you search for very specific patterns of text within strings. The chapter introduces regular expression syntax, and shows how to use PHP’s regular expression functions to search for and replace patterns of text. Lots of examples are included to make the concepts clear.
Chapter 19 explores XML — eXtensible Markup Language — and shows you how to manipulate XML from within your PHP scripts. You learn about XML and its uses, and look at various ways to read and write XML with PHP, including XML Parser, the XML DOM extension, and SimpleXML. You also take a brief look at XML stylesheets, including XSL and XSLT.
Chapter 20 wraps up the book with a discussion on good programming practices. You look at strategies for writing modular code; how to design and implement coding standards for consistency; ways to document your code; how to harden your applications against attack; how to handle errors gracefully; why it’s important to separate application from presentation logic; and ways to test your application code for robustness.
Appendix A contains answers to the exercises found throughout the book.
Appendix B looks at how to configure PHP, and lists all the configuration directives available.
Appendix C explores some alternative databases to MySQL that are supported by PHP.
Appendix D shows you how to use PHP to write command-line scripts, further enhancing the power and flexibility of your applications.
What You Need to Use This Book
To work through the examples in this book you’ll find it helpful to install, or have access to, a Web server running PHP. Because PHP runs happily on most operating systems, including Windows, Linux, and Mac OS X, you should have no trouble installing a Web server with the PHP engine on your setup. Chapter 2 contains easy instructions on how to install PHP and the Apache Web server on Windows, Linux, and the Mac. You can also use a remote Web server — for example, at your Web hosting provider — to run the example scripts.
Although this book covers PHP 5.3, the production version available at the time of writing was 5.2. Therefore some sections of the book — particularly Chapter 2 — contain references to version 5.2. However, as long as you install a version of PHP greater than 5.1 — whether that’s 5.2, 5.3, or later — you’ll be fine.
You’ll need a text editor to create and edit your PHP scripts, and many decent free editors are available. Windows has the Notepad editor built in, which is fine for small projects. On the Mac you can use TextEdit, or one of the command-line editors such as vi or Emacs. Again, on Linux you can use vi, Emacs, or another command-line editor, or install one of the graphical text editors available for Linux, such as Bluefish (http://bluefish.openoffice.nl/).
Using the Command Line
Some parts of the book — notably the chapters on databases, as well as Appendix D — make use of the command-line interface, or “shell,” to enter commands and run programs. This is a powerful tool for communicating with your system.
Before rich graphical environments came into common use, the only way to interact with computers was to type commands, one line at a time. You wanted to run a program? There was no icon to click — you typed the program’s name.
Many programs still make use of the command-line interface. For one thing, it’s a lot simpler to write them that way. What’s more, many people still find it easier to interact with the command prompt than with a mouse-driven windowed environment.
In order to access the command line, you need to do one of the following:
- On Windows, bring up the Start menu and choose All Programs Accessories ⇒ Command Prompt. Alternatively, press Windows+R to call up the Run dialog, type cmd, and click OK.
- On Ubuntu Linux, choose Applications ⇒ Accessories ⇒ Terminal. (On other Linux distros or flavors of UNIX, look for a program with a name such as console, terminal, konsole, xterm, eterm, or kterm. These are all widely used shell programs that can be found on a broad range of UNIX-based systems.)
- On Mac OS X, double-click the Applications ⇒ Utilities ⇒ Terminal app in the Finder.
After you’ve called up the interface, you’ll probably be confronted by a nearly blank window, with just a snippet of text such as one of these:
This is a command prompt or shell prompt, which is simply there to let you know that the interface is ready to receive instructions — prompting you for commands, in effect. It doesn’t really matter what the prompt looks like, just that you recognize it when it appears. In this book, the prompt is designated this way:
The book shows you any commands that you need to type after the prompt ($). The computer-generated output follows. For example:
$ ./hello.php
Hello, world!
$
Sometimes a different prompt is shown. For example, if you’re working with the MySQL command-line program, the following prompt will be shown:
Conventions
To help you get the most from the text and keep track of what’s happening, we’ve used a number of conventions throughout the book.
Try It Out
The Try It Out section contains an exercise you should work through, following the text in the book.
The section includes one or more code listings, instructions on how to run the script and, often, a screen shot showing the script in action.
How It Works
After each Try It Out, the code you’ve typed will be explained in detail.
As for styles in the text:
- I highlight new terms and important words when I introduce them.
- I show keyboard strokes like this: Ctrl+A.
- I show file names, URLs, and code within the text like so: hello.php.
- I present code in two different ways:
I use gray highlighting to highlight new and important code.
I use a monofont type with no highlighting for code that's less important, or that has been shown before.
Source Code
As you work through the examples in this book, you may choose either to type in all the code manually or to use the source code files that accompany the book. All of the source code used in this book is available for download at http://www.wrox.com. Once at the site, simply locate the book’s title (either by using the Search box or by using one of the title lists) and click the Download Code link on the book’s detail page to obtain all the source code for the book.
Once you download the code, just decompress it with your favorite compression tool. Alternately, you can go to the main Wrox code download page at http://www.wrox.com/dynamic/books/download.aspx to see the code available for this book and all other Wrox books.
Errata
We make every effort to ensure that there are no errors in the text or in the code. However, no one is perfect, and mistakes do occur. If you find an error in one of our books, like a spelling mistake or faulty piece of code, we would be very grateful for your feedback. By sending in errata you may save another reader hours of frustration and at the same time you will be helping us provide even higher quality information.
To find the errata page for this book, go to www.wrox.com and locate the title using the Search box or one of the title lists. Then, on the book details page, click the Book Errata link. On this page you can view all errata that has been submitted for this book and posted by Wrox editors. A complete book list including links to each book’s errata is also available at www.wrox.com/misc-pages/booklist.shtml.
If you don’t spot “your” error on the Book Errata page, go to www.wrox.com/contact/techsupport.shtml and complete the form there to send us the error you have found. We’ll check the information and, if appropriate, post a message to the book’s errata page and fix the problem in subsequent editions of the book.
p2p.wrox.com
For author and peer discussion, join the P2P forums at p2p.wrox.com. The forums are a Web-based system for you to post messages relating to Wrox books and related technologies and interact with other readers and technology users. The forums offer a subscription feature to e-mail you topics of interest of your choosing when new posts are made to the forums. Wrox authors, editors, other industry experts, and your fellow readers are present on these forums.
At http://p2p.wrox.com you will find a number of different forums that will help you not only as you read this book, but also as you develop your own applications. To join the forums, just follow these steps:
1. Go to p2p.wrox.com and click the Register link.
2. Read the terms of use and click Agree.
3. Complete the required information to join as well as any optional information you wish to provide and click Submit.
4. You will receive an e-mail with information describing how to verify your account and complete the joining process.
Once you join, you can post new messages and respond to messages other users post. You can read messages at any time on the Web. If you would like to have new messages from a particular forum e-mailed to you, click the Subscribe to this Forum icon by the forum name in the forum listing.
For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to questions about how the forum software works as well as many common questions specific to P2P and Wrox books. To read the FAQs, click the FAQ link on any P2P page.
Part I
Getting Up and Running with PHP
Chapter 1: Introducing PHP
Chapter 2: Your First PHP Script
1
Introducing PHP
Welcome to the world of PHP, one of the Web’s most popular programming languages. According to Netcraft (www.netcraft.com), PHP was running on more than 20 million Web servers in July 2007 (http://www.php.net/usage.php). At the time of writing, it’s the fourth most popular programming language in the world according to TIOBE (http://www.tiobe.com/index.php/content/paperinfo/tpci/), beaten only by Java, C, and C++. With the introduction of version 5.3, there’s never been a better time to learn PHP.
In this chapter you:
- Get a gentle introduction to PHP in general, and the new features of PHP 5.3 in particular
- Learn what PHP is, what it can be used for, and how it stacks up against other dynamic Web technologies
- Take a look at the history of PHP, so you can see how it has evolved over the years, from its humble beginnings to the rich Web development framework it is today
What Is PHP?
PHP is a programming language for building dynamic, interactive Web sites. As a general rule, PHP programs run on a Web server, and serve Web pages to visitors on request. One of the key features of PHP is that you can embed PHP code within HTML Web pages, making it very easy for you to create dynamic content quickly.
What exactly does the phrase “dynamic, interactive Web sites” mean? A dynamic Web page is a page whose contents can change automatically each time the page is viewed. Contrast this with a static Web page, such as a simple HTML file, which looks the same each time it’s displayed (at least until the page is next edited). Meanwhile, an interactive Web site is a site that responds to input from its visitors. A Web forum is a good example — users can post new messages to the forum, which are then displayed on the site for all to see. Another simple example is a “contact us” form, where visitors interact with the page by filling out and sending a form, which is then emailed to the Webmaster.
PHP is a server-side scripting language, which means that PHP scripts, or programs, usually run on a Web server. (A good example of a client-side scripting language is JavaScript, which commonly runs within a Web browser.) Furthermore, PHP is an interpreted language — a PHP script is processed by the PHP engine each time it’s run.
The process of running a PHP script on a Web server looks like this:
1. A visitor requests a Web page by clicking a link, or typing the page’s URL into the browser’s address bar. The visitor might also send data to the Web server at the same time, either using a form embedded in a Web page, or via AJAX (Asynchronous JavaScript And XML).
2. The Web server recognizes that the requested URL is a PHP script, and instructs the PHP engine to process and run the script.
3. The script runs, and when it’s finished it usually sends an HTML page to the Web browser, which the visitor then sees on their screen.
The interesting stuff happens when a PHP script runs. Because PHP is so flexible, a PHP script can carry out any number of interesting tasks, such as:
- Reading and processing the contents of a Web form sent by the visitor
- Reading, writing, and creating files on the Web server
- Working with data in a database stored on the Web server
- Grabbing and processing data from other Web sites and feeds
- Generating dynamic graphics, such as charts and manipulated photos
And finally, once it’s finished processing, it can send a customized HTML Web page back to the visitor.
In this book you learn how to write scripts to do all of these, and more.
All these great features mean that you can use PHP to create practically any type of dynamic Web application you can dream of. Common examples of PHP scripts include:
- Web forums that allow visitors to post messages and discuss topics
- Search engines that let people search the contents of a Web site or database
- Straw poll scripts that enable visitors to vote in polls and surveys
- Content management systems and blogs, which enable Webmasters to create sites easily with minimal technical knowledge
- Webmail applications, allowing people to send and receive email using their Web browser
- Online stores, allowing shoppers to purchase products and services over the Internet
Why Use PHP?
One of the best things about PHP is the large number of Internet service providers (ISPs) and Web hosting companies that support it. Today hundreds of thousands of developers are using PHP, and it’s not surprising that there are so many, considering that several million sites are reported to have PHP installed.
Another great feature of PHP is that it’s cross-platform — you can run PHP programs on Windows, Linux, FreeBSD, Mac OS X, and Solaris, among others. What’s more, the PHP engine can integrate with all common Web servers, including Apache, Internet Information Server (IIS), Zeus, and lighttpd. This means that you can develop and test your PHP Web site on one setup, then deploy it on a different type of system without having to change much of your code. Furthermore, it’s easy to move your PHP Web site onto another server platform, if you ever need to.
How does PHP compare with other common Web programming technologies? At the time of writing, the following technologies are prevalent:
- ASP (Active Server Pages): This venerable Microsoft technology has been around since 1997, and was one of the first Web application technologies to integrate closely with the Web server, resulting in fast performance. ASP scripts are usually written in VBScript, a language derived from BASIC. This contrasts with PHP’s more C-like syntax. Although both languages have their fans, I personally find that it’s easier to write structured, modular code in PHP than in VBScript.
- ASP.NET: This is the latest incarnation of ASP, though in fact it’s been rebuilt from the ground up. It’s actually a framework of libraries that you can use to build Web sites, and you have a choice of languages to use, including C#, VB.NET (Visual Basic), and J# (Java). Because ASP.NET gives you a large library of code for doing things like creating HTML forms and accessing database tables, you can get a Web application up and running very quickly. PHP, although it has a very rich standard library of functions, doesn’t give you a structured framework to the extent that ASP.NET does. On the other hand, plenty of free application frameworks and libraries are available for PHP, such PEAR (discussed later in this book) and the Zend Framework. Many would argue that C# is a nicer, better-organized language to program in than PHP, although C# is arguably harder to learn. Another advantage of ASP.NET is that C# is a compiled language, which generally means it runs faster than PHP’s interpreted scripts (although PHP compilers are available).
- Perl: Perl was one of the first languages used for creating dynamic Web pages, initially through the use of CGI scripting and, later, integrating tightly into Web servers with technologies like the Apache mod_perl module and ActivePerl for IIS. Though Perl is a powerful scripting language, it’s harder to learn than PHP. It’s also more of a general-purpose language than PHP, although Perl’s CPAN library includes some excellent modules for Web development.
- Java: Like Perl, Java is another general-purpose language that is commonly used for Web application development. Thanks to technologies like JSP (JavaServer Pages) and servlets, Java is a great platform for building large-scale, robust Web applications. With software such as Apache Tomcat, you can easily build and deploy Java-based Web sites on virtually any server platform, including Windows, Linux, and FreeBSD. The main downside of Java compared to PHP is that it has quite a steep learning curve, and you have to write a fair bit of code to get even a simple Web site going (though JSP helps a lot in this regard). In contrast, PHP is a simpler language to learn, and it’s quicker to get a basic Web site up and running with PHP. Another drawback of Java is that it’s harder to find a Web hosting company that will support JSP, whereas nearly all hosting companies offer PHP hosting.
- Python: Conceived in the late 1980s, Python is another general-purpose programming language that is now commonly used to build dynamic Web sites. Although it doesn’t have much in the way of Web-specific features built into the language, many useful modules and frameworks, such as Zope and Django, are available that make building Web applications relatively painless. Many popular sites such as Google and YouTube are built using Python, and Python Web hosting is starting to become much more common (though it’s nowhere near as common as PHP hosting). You can even build and host your Python apps on Google’s server with the Google App Engine. Overall, Python is a very nice language, but PHP is currently a lot more popular, and has a lot more built-in functionality to help with building Web sites.
- Ruby: Like Python, Ruby is another general-purpose language that has gained a lot of traction with Web developers in recent years. This is largely due to the excellent Ruby on Rails application framework, which uses the Model-View-Controller (MVC) pattern, along with Ruby’s extensive object-oriented programming features, to make it easy to build a complete Web application very quickly. As with Python, Ruby is fast becoming a popular choice among Web developers, but for now, PHP is much more popular.
- ColdFusion: Along with ASP, Adobe ColdFusion was one of the first Web application frameworks available, initially released back in 1995. ColdFusion’s main selling points are that it’s easy to learn, it lets you build Web applications very quickly, and it’s really easy to create database-driven sites. An additional plus point is its tight integration with Flex, another Adobe technology that allows you to build complex Flash-based Web applications. ColdFusion’s main disadvantages compared to PHP include the fact that it’s not as popular (so it’s harder to find hosting and developers), it’s not as flexible as PHP for certain tasks, and the server software to run your apps can be expensive. (PHP and Apache are, of course, free and open source.)
In summary, PHP occupies something of a middle ground when it comes to Web programming languages. On the one hand, it’s not a general-purpose language like Python or Ruby (although it can be used as one). This makes PHP highly suited to its main job: building Web sites. On the other hand, PHP doesn’t have a complete Web application framework like ASP.NET or Ruby on Rails, meaning that you’re left to build your Web sites “from the ground up” (or use add-on extensions, libraries, and frameworks).
However, this middle ground partly explains the popularity of PHP. The fact that you don’t need to learn a framework or import tons of libraries to do basic Web tasks makes the language easy to learn and use. On the other hand, if you need the extra functionality of libraries and frameworks, they’re there for you.
Another reason for PHP’s popularity is the excellent — and thorough — online documentation available through www.php.net and its mirror sites.
In the past, PHP has been criticized for the way it handled a number of things — for example, one of its main stumbling blocks was the way in which it implemented object support. However, since version 5, PHP has taken stock of the downfalls of its predecessors and, where necessary, has completely rewritten the way in which it implements its functionality. Now more than ever, PHP is a serious contender for large-scale enterprise developments as well as having a large, consolidated base of small- to medium-sized applications.
The Evolution of PHP
Although PHP only started gaining popularity with Web developers around 1998, it was created by Rasmus Lerdorf way back in 1994. PHP started out as a set of simple tools coded in the C language to replace the Perl scripts that Rasmus was using on his personal home page (hence the original meaning of the “PHP” acronym). He released PHP to the general public in 1995, and called it PHP version 2.
In 1997, two more developers, Zeev Suraski and Andi Gutmans, rewrote most of PHP and, along with Rasmus, released PHP version 3.0 in June 1998. By the end of that year, PHP had already amassed tens of thousands of developers, and was being used on hundreds of thousands of Web sites.
For the next version of PHP, Zeev and Andi set about rewriting the PHP core yet again, calling it the “Zend Engine” (basing the name “Zend” on their two names). The new version, PHP 4, was launched in May 2000. This version further improved on PHP 3, and included session handling features, output buffering, a richer core language, and support for a wider variety of Web server platforms.
Although PHP 4 was a marked improvement over version 3, it still suffered from a relatively poor object-oriented programming (OOP) implementation. PHP 5, released in July 2004, addressed this issue, with private and protected class members; final, private, protected, and static methods; abstract classes; interfaces; and a standardized constructor/destructor syntax.
What’s New in PHP 5.3
Most of the changes introduced in version 5.3 are relatively minor, or concern advanced topics outside of the scope of this beginner-level book. In the following sections you take a brief look at some of the more significant changes that might concern you, particularly if you’re moving up from PHP 5.2 or earlier.
Namespaces
The biggest new feature in PHP 5.3 is support for namespaces. This handy feature lets you avoid naming clashes across different parts of an application, or between application libraries.
Namespaces bear some resemblance to folders on a hard disk, in that they let you keep one set of function, class and constant names separate from another. The same name can appear in many namespaces without the names clashing.
PHP 5.3’s namespace features are fairly comprehensive, and include support for sub-namespaces, as well as namespace aliases. You’ll learn more about using namespaces in Chapter 20.
The goto Operator
PHP 5.3 also introduces a goto operator that you can use to jump directly to a line of code within the same file. (You can only jump around within the current function or method.) For example:
goto jumpToHere;
echo 'Hello';
jumpToHere:
echo 'World';
Use goto sparingly — if at all — as it can make your code hard to read, as well as introduce thorny programming errors if you’re not careful. However, it can be useful in some situations, such as breaking out of deeply nested loops.
Nowdoc Syntax
In PHP 5.3 you can quote strings using nowdoc syntax, which complements the existing heredoc syntax. Whereas heredoc-quoted strings are parsed — replacing variable names with values and so on — nowdoc-quoted strings are untouched. The nowdoc syntax is useful if you want to embed a block of PHP code within your script, without the code being processed at all.
Find out more about nowdoc and heredoc syntax in Chapter 5.
Shorthand Form of the Ternary Operator
The ternary operator — introduced in Chapter 4 — lets your code use the value of one expression or another, based on whether a third expression is true or false:
( expression1 ) ? expression2 : expression3;
In PHP 5.3 you can now omit the second expression in the list:
( expression1 ) ?: expression3;
This code evaluates to the value of expression1 if expression1 is true; otherwise it evaluates to the value of expression3.
Advanced Changes
If you’re familiar with earlier versions of PHP, or with other programming languages, then you might be interested in some of the new advanced features in PHP 5.3. As well as the simpler changes just described, PHP 5.3 includes support for powerful programming constructs such as late static bindings, which add a lot of flexibility to static inheritance when working with classes, and closures, which allow for true anonymous functions. It also introduces an optional garbage collector for cleaning up circular references. (Since these are advanced topics, they won’t be covered any further in this book.)
Some of the nastier aspects of earlier PHP versions — namely Register Globals, Magic Quotes and Safe Mode — are deprecated as of version 5.3, and will be removed in PHP 6. Attempting to use these features results in an E_DEPRECATED error (the E_DEPRECATED error level is also new to 5.3).
Summary
In this chapter you gleaned an overview of PHP, one of the most popular Web programming languages in use today. You learned what PHP is, and looked at some of the types of Web applications you can build using it. You also explored some of the alternatives to PHP, including:
- ASP and ASP.NET
- Perl
- Java
- Python
- Ruby and Ruby on Rails
- ColdFusion
With each alternative, you looked at how it compares to PHP, and learned that some technologies are better suited to certain types of dynamic Web sites than others.
In the last sections of the chapter, you studied the history of PHP and explored some of the more significant new features in version 5.3, such as namespaces and the goto operator. Armed with this overview of the PHP language, you’re ready to move on to Chapter 2 and write your first PHP script!