Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Beginning PHP and PostgreSQL 8
PREMIUM
Số trang
896
Kích thước
16.6 MB
Định dạng
PDF
Lượt xem
1436

Beginning PHP and PostgreSQL 8

Nội dung xem thử

Mô tả chi tiết

Beginning PHP

and PostgreSQL 8

From Novice to Professional

■■■

W. Jason Gilmore and Robert H. Treat

Gilmore_5475Front.fm Page i Thursday, February 9, 2006 2:42 PM

Beginning PHP and PostgreSQL 8: From Novice to Professional

Copyright © 2006 by W. Jason Gilmore

All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,

electronic or mechanical, including photocopying, recording, or by any information storage or retrieval

system, without the prior written permission of the copyright owner and the publisher.

ISBN-13 (pbk): 978-1-59059-547-3

ISBN-10 (pbk): 1-59059-547-5

Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1

Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence

of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark

owner, with no intention of infringement of the trademark.

Lead Editor: Matthew Moodie

Technical Reviewers: Greg Sabino Mullane, Matt Wade

Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Jason Gilmore,

Jonathan Hassell, James Huddleston, Chris Mills, Matthew Moodie, Dominic Shakeshaft, Jim Sumser,

Matt Wade

Project Manager: Beth Christmas

Copy Edit Manager: Nicole LeClerc

Copy Editor: Bill McManus

Assistant Production Director: Kari Brooks-Copony

Production Editor: Laura Cheu

Compositor: Susan Glinert Stevens

Proofreader: Nancy Sixsmith

Indexer: John Collin

Artist: Kinetic Publishing Services, LLC

Cover Designer: Kurt Krames

Manufacturing Director: Tom Debolski

Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,

New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or

visit http://www.springeronline.com.

For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA

94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.

The information in this book is distributed on an “as is” basis, without warranty. Although every precaution

has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to

any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly

by the information contained in this work.

The source code for this book is available to readers at http://www.apress.com in the Source Code section.

Gilmore_5475Front.fm Page ii Thursday, February 9, 2006 2:42 PM

This book is dedicated to the memory of my grandfather, William J. Gilmore,

for introducing me to the world of computers.

—W. Jason Gilmore

I dedicate this book to my mother, Gladys Emilia Treat.

Puedes vivir solo una vez,

pero si lo haces bien, una vez es suficiente.

—Robert H. Treat

Gilmore_5475Front.fm Page iii Thursday, February 9, 2006 2:42 PM

Gilmore_5475Front.fm Page iv Thursday, February 9, 2006 2:42 PM

v

Contents at a Glance

About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi

■CHAPTER 1 An Introduction to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

■CHAPTER 2 Installing and Configuring Apache and PHP . . . . . . . . . . . . . . . . . . . . 9

■CHAPTER 3 PHP Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

■CHAPTER 4 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

■CHAPTER 5 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

■CHAPTER 6 Object-Oriented PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

■CHAPTER 7 Advanced OOP Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

■CHAPTER 8 Error and Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

■CHAPTER 9 Strings and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

■CHAPTER 10 Working with the File and Operating System . . . . . . . . . . . . . . . . . 229

■CHAPTER 11 PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

■CHAPTER 12 Date and Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

■CHAPTER 13 Forms and Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

■CHAPTER 14 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

■CHAPTER 15 Handling File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

■CHAPTER 16 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

■CHAPTER 17 PHP and LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

■CHAPTER 18 Session Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

■CHAPTER 19 Templating with Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

■CHAPTER 20 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

■CHAPTER 21 Secure PHP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

■CHAPTER 22 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

Gilmore_5475Front.fm Page v Thursday, February 9, 2006 2:42 PM

vi

■CHAPTER 23 Introducing PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

■CHAPTER 24 Introducing PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573

■CHAPTER 25 Installing PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579

■CHAPTER 26 PostgreSQL Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593

■CHAPTER 27 The Many PostgreSQL Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611

■CHAPTER 28 From Databases to Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625

■CHAPTER 29 Securing PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

■CHAPTER 30 PHP’s PostgreSQL Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665

■CHAPTER 31 Practical Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

■CHAPTER 32 Views and Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707

■CHAPTER 33 PostgreSQL Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719

■CHAPTER 34 PostgreSQL Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739

■CHAPTER 35 Indexes and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749

■CHAPTER 36 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765

■CHAPTER 37 Importing and Exporting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787

Gilmore_5475Front.fm Page vi Thursday, February 9, 2006 2:42 PM

vii

Contents

About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi

■CHAPTER 1 An Introduction to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

General Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Practicality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Power. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Possibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Price . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

■CHAPTER 2 Installing and Configuring Apache and PHP . . . . . . . . . . . . . . 9

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Obtaining the Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

The Installation Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Testing Your Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Customizing the Unix Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Customizing the Windows Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Common Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Viewing and Downloading the Documentation . . . . . . . . . . . . . . . . . 18

Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Managing PHP’s Configuration Directives . . . . . . . . . . . . . . . . . . . . . 19

PHP’s Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Contents

Gilmore_5475Front.fm Page vii Thursday, February 9, 2006 2:42 PM

viii ■CONTENTS

■CHAPTER 3 PHP Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Escaping to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Default Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Short-Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

ASP-Style. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Embedding Multiple Code Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Single-line C++ Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Shell Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Multiple-Line C Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

print() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

echo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

printf(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

sprintf(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Scalar Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Compound Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Special Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Type Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Type Juggling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Type-Related Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Type Identifier Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Variable Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Variable Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

PHP’s Superglobal Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Variable Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Operands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

String Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Double Quotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Single Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Heredoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Gilmore_5475Front.fm Page viii Thursday, February 9, 2006 2:42 PM

■CONTENTS ix

Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Execution Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Looping Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

File Inclusion Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

■CHAPTER 4 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Invoking a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Creating a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Passing Arguments by Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Passing Arguments by Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Default Argument Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Optional Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Returning Values from a Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Nesting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Recursive Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Variable Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Function Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

■CHAPTER 5 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

What Is an Array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Outputting Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Creating an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Testing for an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Adding and Removing Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Locating Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Traversing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Determining Array Size and Uniqueness . . . . . . . . . . . . . . . . . . . . . . . . . 116

Sorting Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Merging, Slicing, Splicing, and Dissecting Arrays . . . . . . . . . . . . . . . . . . 124

Other Useful Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Gilmore_5475Front.fm Page ix Thursday, February 9, 2006 2:42 PM

x ■CONTENTS

■CHAPTER 6 Object-Oriented PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

The Benefits of OOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Key OOP Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

__set() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Type Hinting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Constructors and Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Static Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

The instanceof Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Helper Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Autoloading Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

■CHAPTER 7 Advanced OOP Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Advanced OOP Features Not Supported by PHP . . . . . . . . . . . . . . . . . . . 157

Object Cloning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Cloning Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

The __clone() Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Class Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Inheritance and Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Implementing a Single Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Implementing Multiple Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Gilmore_5475Front.fm Page x Thursday, February 9, 2006 2:42 PM

■CONTENTS xi

Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Writing the ReflectionClass Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

Writing the ReflectionMethod Class . . . . . . . . . . . . . . . . . . . . . . . . . 172

Writing the ReflectionParameter Class. . . . . . . . . . . . . . . . . . . . . . . 174

Writing the ReflectionProperty Class . . . . . . . . . . . . . . . . . . . . . . . . 175

Other Reflection Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

■CHAPTER 8 Error and Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Error Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Why Exception Handling Is Handy. . . . . . . . . . . . . . . . . . . . . . . . . . . 183

PHP’s Exception-Handling Implementation . . . . . . . . . . . . . . . . . . . 185

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

■CHAPTER 9 Strings and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . 191

Complex (Curly) Offset Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

Regular Expression Syntax (POSIX). . . . . . . . . . . . . . . . . . . . . . . . . . 193

PHP’s Regular Expression Functions (POSIX Extended) . . . . . . . . . 195

Regular Expression Syntax (Perl Style). . . . . . . . . . . . . . . . . . . . . . . 198

Other String-Specific Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Determining the Length of a String . . . . . . . . . . . . . . . . . . . . . . . . . 205

Comparing Two Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

Manipulating String Case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Converting Strings to and from HTML . . . . . . . . . . . . . . . . . . . . . . . 209

Alternatives for Regular Expression Functions . . . . . . . . . . . . . . . . 214

Padding and Stripping a String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Counting Characters and Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Taking Advantage of PEAR: Validate_US . . . . . . . . . . . . . . . . . . . . . . . . . 226

Installing Validate_US. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Using Validate_US . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Gilmore_5475Front.fm Page xi Thursday, February 9, 2006 2:42 PM

xii ■CONTENTS

■CHAPTER 10 Working with the File and Operating System . . . . . . . . . . . 229

Learning About Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Parsing Directory Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

File Types and Links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

Calculating File, Directory, and Disk Sizes . . . . . . . . . . . . . . . . . . . 235

Access and Modification Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

File Ownership and Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

The Concept of a Resource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Newline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

End-of-File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Opening and Closing a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Reading from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Moving the File Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Writing to a File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Reading Directory Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

Executing Shell Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

PHP’s Built-in System Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 252

System-Level Program Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

Sanitizing the Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

PHP’s Program Execution Functions. . . . . . . . . . . . . . . . . . . . . . . . . 255

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

■CHAPTER 11 PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Popular PEAR Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Converting Numeral Formats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

Installing and Updating PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Installing PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

PEAR and Hosting Companies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Updating PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Using the PEAR Package Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Viewing Installed Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Learning More About an Installed Package . . . . . . . . . . . . . . . . . . . 265

Installing a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Using a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Upgrading a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Uninstalling a Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Downgrading a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

Gilmore_5475Front.fm Page xii Thursday, February 9, 2006 2:42 PM

■CONTENTS xiii

■CHAPTER 12 Date and Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

The Unix Timestamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

PHP’s Date and Time Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Date Fu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

Displaying the Localized Date and Time . . . . . . . . . . . . . . . . . . . . . 279

Displaying the Web Page’s Most Recent Modification Date . . . . . 283

Determining the Number Days in the Current Month . . . . . . . . . . . 283

Calculating the Date X Days from the Present Date . . . . . . . . . . . . 284

Creating a Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

PHP 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Date Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

The Date Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Accessors and Mutators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Manipulation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

■CHAPTER 13 Forms and Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

PHP and Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

A Simple Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Passing Form Data to a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

Working with Multivalued Form Components . . . . . . . . . . . . . . . . . 307

Generating Forms with PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

Autoselecting Forms Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

PHP, Web Forms, and JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

User-Friendly URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

Breadcrumb Trails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

Creating Custom Error Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

■CHAPTER 14 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

HTTP Authentication Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

PHP Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

Authentication Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

Authentication Methodologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Gilmore_5475Front.fm Page xiii Thursday, February 9, 2006 2:42 PM

xiv ■CONTENTS

User Login Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Password Designation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Testing Password Guessability with the CrackLib Library . . . . . . . 339

One-Time URLs and Password Recovery. . . . . . . . . . . . . . . . . . . . . 342

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

■CHAPTER 15 Handling File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Uploading Files via the HTTP Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Handling Uploads with PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

PHP’s File Upload/Resource Directives . . . . . . . . . . . . . . . . . . . . . . 346

The $_FILES Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

PHP’s File-Upload Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Upload Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

File-Upload Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

Taking Advantage of PEAR: HTTP_Upload . . . . . . . . . . . . . . . . . . . . . . . . 355

Installing HTTP_Upload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

Learning More About an Uploaded File . . . . . . . . . . . . . . . . . . . . . . 355

Moving an Uploaded File to the Final Destination . . . . . . . . . . . . . . 356

Uploading Multiple Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

■CHAPTER 16 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

DNS, Services, and Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Establishing Socket Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

Configuration Directives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

Sending a Plain-Text E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

Sending an E-Mail with Additional Headers. . . . . . . . . . . . . . . . . . . 369

Sending an E-Mail to Multiple Recipients . . . . . . . . . . . . . . . . . . . . 369

Sending an HTML-Formatted E-Mail . . . . . . . . . . . . . . . . . . . . . . . . 370

Sending an Attachment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

IMAP, POP3, and NNTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Establishing and Closing a Connection . . . . . . . . . . . . . . . . . . . . . . 374

Learning More About Mailboxes and Mail . . . . . . . . . . . . . . . . . . . . 375

Gilmore_5475Front.fm Page xiv Thursday, February 9, 2006 2:42 PM

Tải ngay đi em, còn do dự, trời tối mất!