Preface |
|
xv | |
1 Strings |
|
1 | (34) |
|
|
5 | (1) |
|
1.2 Extracting Substrings |
|
|
6 | (1) |
|
|
7 | (2) |
|
1.4 Processing a String One Byte at a Time |
|
|
9 | (1) |
|
1.5 Reversing a String by Word or Byte |
|
|
10 | (1) |
|
1.6 Generating a Random String |
|
|
11 | (1) |
|
1.7 Expanding and Compressing Tabs |
|
|
12 | (2) |
|
|
14 | (2) |
|
1.9 Interpolating Functions and Expressions Within Strings |
|
|
16 | (1) |
|
1.10 Trimming Blanks from a String |
|
|
17 | (2) |
|
1.11 Generating Comma-Separated Data |
|
|
19 | (1) |
|
1.12 Parsing Comma-Separated Data |
|
|
20 | (1) |
|
1.13 Generating Fixed-Width Field Data Records |
|
|
21 | (1) |
|
1.14 Parsing Fixed-Width Field Data Records |
|
|
22 | (3) |
|
1.15 Taking Strings Apart |
|
|
25 | (2) |
|
1.16 Wrapping Text at a Certain Line Length |
|
|
27 | (2) |
|
1.17 Storing Binary Data in Strings |
|
|
29 | (2) |
|
1.18 Program: Downloadable CSV File |
|
|
31 | (4) |
2 Numbers |
|
35 | (26) |
|
2.1 Checking Whether a Variable Contains a Valid Number |
|
|
36 | (1) |
|
2.2 Comparing Floating-Point Numbers |
|
|
37 | (1) |
|
2.3 Rounding Floating-Point Numbers |
|
|
38 | (2) |
|
2.4 Operating on a Series of Integers |
|
|
40 | (2) |
|
2.5 Generating Random Numbers Within a Range |
|
|
42 | (1) |
|
2.6 Generating Predictable Random Numbers |
|
|
43 | (1) |
|
2.7 Generating Biased Random Numbers |
|
|
44 | (2) |
|
|
46 | (1) |
|
2.9 Calculating Exponents |
|
|
46 | (1) |
|
|
47 | (2) |
|
2.11 Formatting Monetary Values |
|
|
49 | (1) |
|
2.12 Printing Correct Plurals |
|
|
50 | (1) |
|
2.13 Calculating Trigonometric Functions |
|
|
51 | (1) |
|
2.14 Doing Trigonometry in Degrees, Not Radians |
|
|
52 | (1) |
|
2.15 Handling Very Large or Very Small Numbers |
|
|
53 | (2) |
|
2.16 Converting Between Bases |
|
|
55 | (1) |
|
2.17 Calculating Using Numbers in Bases Other Than Decimal |
|
|
56 | (2) |
|
2.18 Finding the Distance Between Two Places |
|
|
58 | (3) |
3 Dates and limes |
|
61 | (34) |
|
3.1 Finding the Current Date and Time |
|
|
63 | (3) |
|
3.2 Converting Time and Date Parts to an Epoch Timestamp |
|
|
66 | (2) |
|
3.3 Converting an Epoch Timestamp to Time and Date Parts |
|
|
68 | (1) |
|
3.4 Printing a Date or Time in a Specified Format |
|
|
69 | (3) |
|
3.5 Finding the Difference of Two Dates |
|
|
72 | (2) |
|
3.6 Finding the Day in a Week, Month, or Year |
|
|
74 | (2) |
|
|
76 | (1) |
|
3.8 Parsing Dates and Times from Strings |
|
|
77 | (3) |
|
3.9 Adding to or Subtracting from a Date |
|
|
80 | (1) |
|
3.10 Calculating Time with Time Zones and Daylight Saving Time |
|
|
81 | (2) |
|
3.11 Generating a High-Precision Time |
|
|
83 | (1) |
|
3.12 Generating Time Ranges |
|
|
84 | (1) |
|
3.13 Using Non-Gregorian Calendars |
|
|
85 | (3) |
|
|
88 | (7) |
4 Arrays |
|
95 | (42) |
|
4.1 Specifying an Array Not Beginning at Element 0 |
|
|
98 | (1) |
|
4.2 Storing Multiple Elements per Key in an Array |
|
|
99 | (2) |
|
4.3 Initializing an Array to a Range of Integers |
|
|
101 | (1) |
|
4.4 Iterating Through an Array |
|
|
101 | (3) |
|
4.5 Deleting Elements from an Array |
|
|
104 | (2) |
|
|
106 | (2) |
|
4.7 Appending One Array to Another |
|
|
108 | (2) |
|
4.8 Turning an Array into a String |
|
|
110 | (1) |
|
4.9 Printing an Array with Commas |
|
|
111 | (2) |
|
4.10 Checking if a Key Is in an Array |
|
|
113 | (1) |
|
4.11 Checking if an Element Is in an Array |
|
|
113 | (2) |
|
4.12 Finding the Position of a Value in an Array |
|
|
115 | (1) |
|
4.13 Finding Elements That Pass a Certain Test |
|
|
116 | (1) |
|
4.14 Finding the Largest or Smallest Valued Element in an Array |
|
|
117 | (1) |
|
|
118 | (1) |
|
|
119 | (1) |
|
4.17 Sorting an Array by a Computable Field |
|
|
120 | (3) |
|
4.18 Sorting Multiple Arrays |
|
|
123 | (1) |
|
4.19 Sorting an Array Using a Method Instead of a Function |
|
|
124 | (1) |
|
4.20 Randomizing an Array |
|
|
125 | (1) |
|
4.21 Removing Duplicate Elements from an Array |
|
|
126 | (1) |
|
4.22 Applying a Function to Each Element in an Array |
|
|
127 | (2) |
|
4.23 Finding the Union, Intersection, or Difference of Two Arrays |
|
|
129 | (2) |
|
4.24 Iterating Efficiently over Large or Expensive Datasets |
|
|
131 | (2) |
|
4.25 Accessing an Object Using Array Syntax |
|
|
133 | (4) |
5 Variables |
|
137 | (22) |
|
5.1 Avoiding = Versus = Confusion |
|
|
139 | (1) |
|
5.2 Establishing a Default Value |
|
|
140 | (1) |
|
5.3 Exchanging Values Without Using Temporary Variables |
|
|
141 | (1) |
|
5.4 Creating a Dynamic Variable Name |
|
|
142 | (1) |
|
5.5 Persisting a Local Variable's Value Across Function Invocations |
|
|
143 | (2) |
|
5.6 Sharing Variables Between Processes |
|
|
145 | (7) |
|
5.7 Encapsulating Complex Data Types in a String |
|
|
152 | (1) |
|
5.8 Dumping Variable Contents as Strings |
|
|
153 | (6) |
6 Functions |
|
159 | (22) |
|
6.1 Accessing Function Parameters |
|
|
160 | (1) |
|
6.2 Setting Default Values for Function Parameters |
|
|
161 | (2) |
|
6.3 Passing Values by Reference |
|
|
163 | (1) |
|
6.4 Using Named Parameters |
|
|
164 | (1) |
|
6.5 Enforcing Types of Function Arguments |
|
|
165 | (1) |
|
6.6 Creating Functions That Take a Variable Number of Arguments |
|
|
166 | (3) |
|
6.7 Returning Values by Reference |
|
|
169 | (2) |
|
6.8 Returning More Than One Value |
|
|
171 | (1) |
|
6.9 Skipping Selected Return Values |
|
|
172 | (1) |
|
|
173 | (1) |
|
6.11 Calling Variable Functions |
|
|
174 | (3) |
|
6.12 Accessing a Global Variable Inside a Function |
|
|
177 | (1) |
|
6.13 Creating Dynamic Functions |
|
|
178 | (3) |
7 Classes and Objects |
|
181 | (56) |
|
7.1 Instantiating Objects |
|
|
185 | (1) |
|
7.2 Defining Object Constructors |
|
|
186 | (1) |
|
7.3 Defining Object Destructors |
|
|
187 | (1) |
|
7.4 Implementing Access Control |
|
|
188 | (3) |
|
7.5 Preventing Changes to Classes and Methods |
|
|
191 | (1) |
|
7.6 Defining Object Stringification |
|
|
192 | (1) |
|
7.7 Requiring Multiple Classes to Behave Similarly |
|
|
193 | (4) |
|
7.8 Creating Abstract Base Classes |
|
|
197 | (2) |
|
7.9 Assigning Object References |
|
|
199 | (1) |
|
|
200 | (3) |
|
7.11 Overriding Property Accesses |
|
|
203 | (4) |
|
7.12 Calling Methods on an Object Returned by Another Method |
|
|
207 | (1) |
|
|
208 | (4) |
|
7.14 Accessing Overridden Methods |
|
|
212 | (2) |
|
7.15 Creating Methods Dynamically |
|
|
214 | (1) |
|
7.16 Using Method Polymorphism |
|
|
215 | (2) |
|
7.17 Defining Class Constants |
|
|
217 | (2) |
|
7.18 Defining Static Properties and Methods |
|
|
219 | (3) |
|
7.19 Controlling Object Serialization |
|
|
222 | (2) |
|
7.20 Introspecting Objects |
|
|
224 | (4) |
|
7.21 Checking If an Object Is an Instance of a Specific Class |
|
|
228 | (3) |
|
7.22 Autoloading Class Files upon Object Instantiation |
|
|
231 | (1) |
|
7.23 Instantiating an Object Dynamically |
|
|
232 | (1) |
|
|
233 | (4) |
8 Web Fundamentals |
|
237 | (40) |
|
|
238 | (2) |
|
8.2 Reading Cookie Values |
|
|
240 | (1) |
|
|
240 | (1) |
|
8.4 Building a Query String |
|
|
241 | (1) |
|
8.5 Reading the POST Request Body |
|
|
242 | (1) |
|
8.6 Using HTTP Basic or Digest Authentication |
|
|
243 | (4) |
|
8.7 Using Cookie Authentication |
|
|
247 | (3) |
|
8.8 Reading an HTTP Header |
|
|
250 | (1) |
|
8.9 Writing an HTTP Header |
|
|
251 | (1) |
|
8.10 Sending a Specific HTTP Status Code |
|
|
252 | (1) |
|
8.11 Redirecting to a Different Location |
|
|
253 | (2) |
|
8.12 Flushing Output to the Browser` |
|
|
255 | (1) |
|
8.13 Buffering Output to the Browser |
|
|
255 | (2) |
|
8.14 Compressing Web Output |
|
|
257 | (1) |
|
8.15 Reading Environment Variables |
|
|
258 | (1) |
|
8.16 Setting Environment Variables |
|
|
258 | (1) |
|
8.17 Communicating Within Apache |
|
|
259 | (1) |
|
8.18 Redirecting Mobile Browsers to a Mobile Optimized Site |
|
|
260 | (1) |
|
8.19 Program: Website Account (De)activator |
|
|
261 | (3) |
|
|
264 | (3) |
|
|
267 | (10) |
9 Forms |
|
277 | (32) |
|
9.1 Processing Form Input |
|
|
279 | (2) |
|
9.2 Validating Form Input: Required Fields |
|
|
281 | (2) |
|
9.3 Validating Form Input: Numbers |
|
|
283 | (2) |
|
9.4 Validating Form Input: Email Addresses |
|
|
285 | (1) |
|
9.5 Validating Form Input: Drop-Down Menus |
|
|
286 | (1) |
|
9.6 Validating Form Input: Radio Buttons |
|
|
287 | (2) |
|
9.7 Validating Form Input: Checkboxes |
|
|
289 | (2) |
|
9.8 Validating Form Input: Dates and Times |
|
|
291 | (1) |
|
9.9 Validating Form Input: Credit Cards |
|
|
292 | (1) |
|
9.10 Preventing Cross-Site Scripting |
|
|
293 | (1) |
|
9.11 Processing Uploaded Files |
|
|
294 | (3) |
|
9.12 Working with Multipage Forms |
|
|
297 | (2) |
|
9.13 Redisplaying Forms with Inline Error Messages |
|
|
299 | (2) |
|
9.14 Guarding Against Multiple Submissions of the Same Form |
|
|
301 | (2) |
|
9.15 Preventing Global Variable Injection |
|
|
303 | (2) |
|
9.16 Handling Remote Variables with Periods in Their Names |
|
|
305 | (1) |
|
9.17 Using Form Elements with Multiple Options |
|
|
306 | (1) |
|
9.18 Creating Drop-Down Menus Based on the Current Date |
|
|
307 | (2) |
10 Database Access |
|
309 | (46) |
|
|
312 | (3) |
|
10.2 Using an SQLite Database |
|
|
315 | (2) |
|
10.3 Connecting to an SQL Database |
|
|
317 | (1) |
|
10.4 Querying an SQL Database |
|
|
318 | (3) |
|
10.5 Retrieving Rows Without a Loop |
|
|
321 | (1) |
|
10.6 Modifying Data in an SQL Database |
|
|
322 | (1) |
|
10.7 Repeating Queries Efficiently |
|
|
323 | (3) |
|
10.8 Finding the Number of Rows Returned by a Query |
|
|
326 | (1) |
|
|
327 | (2) |
|
10.10 Logging Debugging Information and Errors |
|
|
329 | (2) |
|
10.11 Creating Unique Identifiers |
|
|
331 | (2) |
|
10.12 Building Queries Programmatically |
|
|
333 | (5) |
|
10.13 Making Paginated Links for a Series of Records |
|
|
338 | (3) |
|
10.14 Caching Queries and Results |
|
|
341 | (3) |
|
10.15 Accessing a Database Connection Anywhere in Your Program |
|
|
344 | (2) |
|
10.16 Program: Storing a Threaded Message Board |
|
|
346 | (7) |
|
|
353 | (2) |
11 Sessions and Data Persistence |
|
355 | (16) |
|
11.1 Using Session Tracking |
|
|
356 | (2) |
|
11.2 Preventing Session Hijacking |
|
|
358 | (1) |
|
11.3 Preventing Session Fixation |
|
|
359 | (1) |
|
11.4 Storing Sessons in Memcached |
|
|
360 | (1) |
|
11.5 Storing Sessions in a Database |
|
|
361 | (3) |
|
11.6 Storing Arbitrary Data in Shared Memory |
|
|
364 | (3) |
|
11.7 Caching Calculated Results in Summary Tables |
|
|
367 | (4) |
12 XML |
|
371 | (44) |
|
12.1 Generating XML as a String |
|
|
374 | (1) |
|
12.2 Generating XML with DOM |
|
|
375 | (3) |
|
12.3 Parsing Basic XML Documents |
|
|
378 | (3) |
|
12.4 Parsing Complex XML Documents |
|
|
381 | (2) |
|
12.5 Parsing Large XML Documents |
|
|
383 | (6) |
|
12.6 Extracting Information Using XPath |
|
|
389 | (3) |
|
12.7 Transforming XML with XSLT |
|
|
392 | (2) |
|
12.8 Setting XSLT Parameters from PHP |
|
|
394 | (2) |
|
12.9 Calling PHP Functions from XSLT Stylesheets |
|
|
396 | (4) |
|
12.10 Validating XML Documents |
|
|
400 | (2) |
|
12.11 Handling Content Encoding |
|
|
402 | (1) |
|
12.12 Reading RSS and Atom Feeds |
|
|
403 | (3) |
|
|
406 | (3) |
|
|
409 | (6) |
13 Web Automation |
|
415 | (26) |
|
13.1 Marking Up a Web Page |
|
|
416 | (3) |
|
13.2 Cleaning Up Broken or Nonstandard HTML |
|
|
419 | (3) |
|
13.3 Extracting Links from an HTML File |
|
|
422 | (3) |
|
13.4 Converting Plain Text to HTML |
|
|
425 | (1) |
|
13.5 Converting HTML to Plain Text |
|
|
426 | (1) |
|
13.6 Removing HTML and PHP Tags |
|
|
426 | (4) |
|
13.7 Responding to an Ajax Request |
|
|
430 | (2) |
|
13.8 Integrating with JavaScript |
|
|
432 | (3) |
|
13.9 Program: Finding Stale Links |
|
|
435 | (3) |
|
13.10 Program: Finding Fresh Links |
|
|
438 | (3) |
14 Consuming RESTfuI APIs |
|
441 | (26) |
|
14.1 Fetching a URL with the GET Method |
|
|
442 | (4) |
|
14.2 Fetching a URL with the POST Method and Form Data |
|
|
446 | (2) |
|
14.3 Fetching a URL with an Arbitrary Method and POST Body |
|
|
448 | (2) |
|
14.4 Fetching a URL with Cookies |
|
|
450 | (2) |
|
14.5 Fetching a URL with Arbitrary Headers |
|
|
452 | (2) |
|
14.6 Fetching a URL with a Timeout |
|
|
454 | (2) |
|
14.7 Fetching an HTTPS URL |
|
|
456 | (1) |
|
14.8 Debugging the Raw HTTP Exchange |
|
|
456 | (5) |
|
14.9 Making an OAuth 1.0 Request |
|
|
461 | (1) |
|
14.10 Making an OAuth 2.0 Request |
|
|
462 | (5) |
15 Serving RESTful APIs |
|
467 | (24) |
|
15.1 Exposing and Routing to a Resource |
|
|
470 | (3) |
|
15.2 Exposing Clean Resource Paths |
|
|
473 | (1) |
|
15.3 Exposing a Resource for Reading |
|
|
474 | (2) |
|
|
476 | (5) |
|
|
481 | (2) |
|
|
483 | (1) |
|
15.7 Indicating Errors and Failures |
|
|
484 | (2) |
|
15.8 Supporting Multiple Formats |
|
|
486 | (5) |
16 Internet Services |
|
491 | (22) |
|
|
492 | (2) |
|
|
494 | (2) |
|
16.3 Reading Mail with IMAP or POP3 |
|
|
496 | (4) |
|
16.4 Getting and Putting Files with FTP |
|
|
500 | (2) |
|
16.5 Looking Up Addresses with LDAP |
|
|
502 | (2) |
|
16.6 Using LDAP for User Authentication |
|
|
504 | (2) |
|
16.7 Performing DNS Lookups |
|
|
506 | (3) |
|
16.8 Checking If a Host Is Alive |
|
|
509 | (1) |
|
16.9 Getting Information About a Domain Name |
|
|
510 | (3) |
17 Graphics |
|
513 | (32) |
|
17.1 Drawing Lines, Rectangles, and Polygons |
|
|
516 | (3) |
|
17.2 Drawing Arcs, Ellipses, and Circles |
|
|
519 | (2) |
|
17.3 Drawing with Patterned Lines |
|
|
521 | (1) |
|
|
522 | (3) |
|
17.5 Drawing Centered Text |
|
|
525 | (3) |
|
17.6 Building Dynamic Images |
|
|
528 | (3) |
|
17.7 Getting and Setting a Transparent Color |
|
|
531 | (1) |
|
17.8 Overlaying Watermarks |
|
|
532 | (2) |
|
17.9 Creating Thumbnail Images |
|
|
534 | (4) |
|
|
538 | (1) |
|
17.11 Serving Images Securely |
|
|
539 | (2) |
|
17.12 Program: Generating Bar Charts from Poll Results |
|
|
541 | (4) |
18 Security and Encryption |
|
545 | (26) |
|
18.1 Preventing Session Fixation |
|
|
546 | (1) |
|
18.2 Protecting Against Form Spoofing |
|
|
547 | (1) |
|
18.3 Ensuring Input Is Filtered |
|
|
548 | (1) |
|
18.4 Avoiding Cross-Site Scripting |
|
|
549 | (1) |
|
18.5 Eliminating SQL Injection |
|
|
550 | (1) |
|
18.6 Keeping Passwords Out of Your Site Files |
|
|
551 | (1) |
|
|
552 | (3) |
|
18.8 Dealing with Lost Passwords |
|
|
555 | (2) |
|
18.9 Verifying Data with Hashes |
|
|
557 | (2) |
|
18.10 Encrypting and Decrypting Data |
|
|
559 | (2) |
|
18.11 Storing Encrypted Data in a File or Database |
|
|
561 | (3) |
|
18.12 Sharing Encrypted Data with Another Website |
|
|
564 | (2) |
|
|
566 | (1) |
|
18.14 Encrypting Email with GPG |
|
|
567 | (4) |
19 Internationalization and Localization |
|
571 | (28) |
|
19.1 Determining the User's Locale |
|
|
573 | (1) |
|
19.2 Localizing Text Messages |
|
|
574 | (3) |
|
19.3 Localizing Dates and Times |
|
|
577 | (4) |
|
|
581 | (3) |
|
19.5 Localizing Currency Values |
|
|
584 | (1) |
|
|
585 | (2) |
|
19.7 Localizing Included Files |
|
|
587 | (1) |
|
19.8 Sorting in a Locale-Aware Order |
|
|
588 | (1) |
|
19.9 Managing Localization Resources |
|
|
589 | (2) |
|
19.10 Setting the Character Encoding of Outgoing Data |
|
|
591 | (1) |
|
19.11 Setting the Character Encoding of Incoming Data |
|
|
592 | (1) |
|
19.12 Manipulating UTF-8 Text |
|
|
593 | (6) |
20 Error Handling |
|
599 | (22) |
|
20.1 Finding and Fixing Parse Errors |
|
|
600 | (2) |
|
20.2 Creating Your Own Exception Classes |
|
|
602 | (3) |
|
20.3 Printing a Stack Trace |
|
|
605 | (3) |
|
20.4 Reading Configuration Variables |
|
|
608 | (2) |
|
20.5 Setting Configuration Variables |
|
|
610 | (1) |
|
20.6 Hiding Error Messages from Users |
|
|
610 | (2) |
|
20.7 Tuning Error Handling |
|
|
612 | (2) |
|
20.8 Using a Custom Error Handler |
|
|
614 | (1) |
|
|
615 | (2) |
|
20.10 Eliminating "headers already sent" Errors |
|
|
617 | (1) |
|
20.11 Logging Debugging Information |
|
|
618 | (3) |
21 Software Engineering |
|
621 | (14) |
|
21.1 Using a Debugger Extension |
|
|
621 | (4) |
|
|
625 | (1) |
|
21.3 Writing a Unit Test Suite |
|
|
626 | (2) |
|
21.4 Applying a Unit Test to a Web Page |
|
|
628 | (2) |
|
21.5 Setting Up a Test Environment |
|
|
630 | (1) |
|
21.6 Using the Built-in Web Server |
|
|
631 | (4) |
22 Performance Tuning |
|
635 | (18) |
|
22.1 Using an Accelerator |
|
|
636 | (1) |
|
22.2 Timing Function Execution |
|
|
637 | (1) |
|
22.3 Timing Program Execution by Function |
|
|
638 | (2) |
|
22.4 Timing Program Execution by Statement |
|
|
640 | (2) |
|
22.5 Timing Program Execution by Section |
|
|
642 | (2) |
|
22.6 Profiling with a Debugger Extension |
|
|
644 | (4) |
|
22.7 Stress-Testing Your Website |
|
|
648 | (1) |
|
22.8 Avoiding Regular Expressions |
|
|
649 | (4) |
23 Regular Expressions |
|
653 | (20) |
|
23.1 Switching from ereg to preg |
|
|
657 | (2) |
|
|
659 | (1) |
|
23.3 Finding the nth Occurrence of a Match |
|
|
660 | (2) |
|
23.4 Choosing Greedy or Nongreedy Matches |
|
|
662 | (2) |
|
23.5 Finding All Lines in a File That Match a Pattern |
|
|
664 | (1) |
|
23.6 Capturing Text Inside HTML Tags |
|
|
665 | (1) |
|
23.7 Preventing Parentheses from Capturing Text |
|
|
666 | (2) |
|
23.8 Escaping Special Characters in a Regular Expression |
|
|
668 | (1) |
|
23.9 Reading Records with a Pattern Separator |
|
|
669 | (1) |
|
23.10 Using a PHP Function in a Regular Expression |
|
|
670 | (3) |
24 Files |
|
673 | (38) |
|
24.1 Creating or Opening a Local File |
|
|
677 | (1) |
|
24.2 Creating a Temporary File |
|
|
678 | (1) |
|
24.3 Opening a Remote File |
|
|
679 | (1) |
|
24.4 Reading from Standard Input |
|
|
680 | (1) |
|
24.5 Reading a File into a String |
|
|
681 | (1) |
|
24.6 Counting Lines, Paragraphs, or Records in a File |
|
|
682 | (3) |
|
24.7 Processing Every Word in a File |
|
|
685 | (2) |
|
24.8 Picking a Random Line from a File |
|
|
687 | (1) |
|
24.9 Randomizing All Lines in a File |
|
|
687 | (1) |
|
24.10 Processing Variable-Length Text Fields |
|
|
688 | (2) |
|
24.11 Reading Configuration Files |
|
|
690 | (2) |
|
24.12 Modifying a File in Place Without a Temporary File |
|
|
692 | (1) |
|
24.13 Flushing Output to a File |
|
|
693 | (1) |
|
24.14 Writing to Standard Output |
|
|
694 | (1) |
|
24.15 Writing to Many Filehandles Simultaneously |
|
|
695 | (1) |
|
24.16 Escaping Shell Metacharacters |
|
|
696 | (1) |
|
24.17 Passing Input to a Program |
|
|
697 | (1) |
|
24.18 Reading Standard Output from a Program |
|
|
698 | (2) |
|
24.19 Reading Standard Error from a Program |
|
|
700 | (1) |
|
|
701 | (2) |
|
24.21 Reading and Writing Custom File Types |
|
|
703 | (5) |
|
24.22 Reading and Writing Compressed Files |
|
|
708 | (3) |
25 Directories |
|
711 | (22) |
|
25.1 Getting and Setting File-Timestamps |
|
|
714 | (1) |
|
25.2 Getting File Information |
|
|
715 | (1) |
|
25.3 Changing File Permissions or Ownership |
|
|
716 | (1) |
|
25.4 Splitting a Filename into Its Component Parts |
|
|
717 | (2) |
|
|
719 | (1) |
|
25.6 Copying or Moving a File |
|
|
719 | (1) |
|
25.7 Processing All Files in a Directory |
|
|
720 | (1) |
|
25.8 Getting a List of Filenames Matching a Pattern |
|
|
721 | (2) |
|
25.9 Processing All Files in a Directory Recursively |
|
|
723 | (1) |
|
25.10 Making New Directories |
|
|
723 | (1) |
|
25.11 Removing a Directory and Its Contents |
|
|
724 | (1) |
|
25.12 Program: Web Server Directory Listing |
|
|
725 | (4) |
|
25.13 Program: Site Search |
|
|
729 | (4) |
26 Command-Line PHP |
|
733 | (18) |
|
26.1 Parsing Program Arguments |
|
|
735 | (1) |
|
26.2 Parsing Program Arguments with getopt |
|
|
736 | (2) |
|
26.3 Reading from the Keyboard |
|
|
738 | (2) |
|
26.4 Running PHP Code on Every Line of an Input File |
|
|
740 | (2) |
|
|
742 | (2) |
|
26.6 Colorizing Console Output |
|
|
744 | (2) |
|
26.7 Program: DOM Explorer |
|
|
746 | (5) |
27 Packages |
|
751 | (22) |
|
27.1 Defining and Installing Composer Dependencies |
|
|
754 | (1) |
|
27.2 Finding Composer Packages |
|
|
755 | (2) |
|
27.3 Installing Composer Packages |
|
|
757 | (3) |
|
27.4 Using the PEAR Installer |
|
|
760 | (3) |
|
27.5 Finding PEAR Packages |
|
|
763 | (2) |
|
27.6 Finding Information About a Package |
|
|
765 | (1) |
|
27.7 Installing PEAR Packages |
|
|
766 | (2) |
|
27.8 Upgrading PEAR Packages |
|
|
768 | (1) |
|
27.9 Uninstalling PEAR Packages |
|
|
769 | (1) |
|
27.10 Installing PECL Packages |
|
|
770 | (3) |
Index |
|
773 | |