Richard Samar (Hrsg.), Christian Stocker (Hrsg.), Andre Gildemeister, Hannes Gassert, Matthias Lehn

PHP de Luxe PHP 5 Edition

Inhaltsverzeichnis

s Werkes darf in irgendfahren) ohne schriftliche elektronischer Systeme immt keine Gewähr für »esondere übernimmt er olgeschäden. >ezeichnungen usw. in t zu der Annahme, dass esetzgebung als frei zu

VLandsberg

Vorwort und Danksagung

15

Einleitung

19

1

PHP - Geschichte, Aufbau und Neuheiten

33

1.1 1.1.1 1.1.2

Was ist PHP? - Geschichte und Entwicklung Historischer Rückblick Die Open-Source-Entwicklergemeinde

33 34 35

1.2 1.2.1 1.2.2

Der technische Aufbau von PHP Die Zend Engine-Architektur Der Aufbau von serverseitigen Extensions

36 36 37

1.3 1.3.1 1.3.2 1.3.3 1.3.4

Was ist neu in PHP 5? Neue Sprachmittel Neuerungen der Extensions PEAR PECL: PHP Extension Community Library

38 38 38 39 39

2

PHP 5: Neuheiten und Migration

41

2.1

Objektorientierte Programmierung und PHP 5

41

2.2

Der strenge Modus: E_STRICT

42

2.3 2.3.1

Objektmodell und Konzept von PHP 5 Das Objekt als Referenztyp

43 43

2.3.2

Erschaffen und Zerstören von Objekten

45

2.4

Datenkapselung mit public, private und protected

47

2.5

Class Type hints

52

2.6 2.6.1

Const, Static und der Klassenkontext Statische Eigenschaften und Methoden

53 54

2.7 2.7.1 2.7.2 2.7.3

Interfaces und Abstrakte Klassen Schnittsteilendefinition mit Interfaces Abstrakte Klassen Interfaces und abstrakte Klassen: Eine Gegenüberstellung

55 55 56 58

Inhaltsverzeichnis

2.8 2.8.1 2.8.2 2.8.3 2.8.4

Die magischen Underscores set() und get() _call() und _toString() autoload clone

59 59 61 63 64

2.9 2.9.I

Schleifen, Objekte und Referenzen Fehlerbehandlung mit Exceptions

64 71

2.IO 2.IO.I 2.IO.2 2.IO.3

Der Umstieg von Version 4 zu 5 Änderungen am Code Änderungen bei der Installation Neue Funktionen

76 76 77 78

2.II

Fazit

80

Konzepte und Tools für die Webentwicklung

81

3.1.3 3.1.4

Editoren und IDEs Einführung Features von Editoren PHP-IDEs in der Detailbetrachtung Fazit

82 82 83 86 98

3.2 3.2.1 3.2.2 3.2.3 3.2.4

PHP-Debugger Einführung Xdebug Beschaffung und Installation der Tools Testskript und Debugdemonstration

98 98 99 104 107

3-3 3.3.1 3.3.2 3-3-3 3.3.4

API-Dokumentationen in PHP Dokumentations-Tools Warum Dokumentation? phpDocumentor Fazit

115 116 117 119 132

3-4 3.4.1 3.4.2 3.4.3 3.4.4

CVS Repository von PHP Einführung Verwendung von CVS Einen eigenen CVS Account beantragen Einbindung fremder Extensionen

132 132 134 138 139

3-5 3.5.1 3.5.2 3-5-3 3.5.4

PEAR: PHP Extension and Application Repository Was ist PEAR? Vefügbare PEAR-Packages Installation von PEAR- und PEAR/PECL-Modulen Wie benutze ich PEAR-Pakete

140 140 141 143 148

3- 1 3.1.1 3.1.2

3-57 3.5.8

Die PEAR-Basisk PEAR Coding Sta Zu PEAR beitrag« Zukunft

3-6 3.6.1 3.6.2 3.6.3 3.6.4 3-6-5 3.6.6

Template-Engine Einführung PHP Template-Ei Smarty - Compil XSLT-Mehr als Performance Ver Fazit

4

PHP 5 und Dater

4.1

Neue Features in

4.2

4.2.3 4.2.4

PHP und MySQI Installation Zugriff auf MyS( Zugriff auf MyS( MySQLi - Die nc

4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5

PHP und Postgr« PostgreSQL - Mi Beschaffung und Zugriff auf Postg Zugriff auf Post^ PHP API für Pos

4-4 4.4.1 4.4.2 4.4.3 4.4.4

PHP und Oracle Oracle TerminoL Beschaffung, Ins Zugriff auf Oracl PHP API für Or;

4.5 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5

PEAR Kompone: Einführung.... PEAR::DB .. PEAR::MDB2.. DB_QueryTool. DB_DataObject

4.6 4.6.1 4.6.2

PHP 5 und SQL Fetchmodi . . . . Query-Funktion

3-5-5 3.5.6

4.2.1 4.2.2

Inhaltsverzeichnis

Die PEAR-Basisklasse PEAR Coding Standards Zu PEAR beitragen Zukunft

149 154 155 158

Template-Engines Einführung PHP Template-Engines in der Detailbetrachtung Smarty - Compiling Template-Engine XSLT - Mehr als eine mächtige Alternative Performance Vergleich Fazit

158 159 160 165 172 173 174

PHP 5 und Datenbanken

177

Neue Features in MySQL

179

PHP und MySQL Installation Zugriff auf MySQL ohne PHP Zugriff auf MySQL mit einem PHP-basierten Tool MySQLi - Die neue verbesserte MySQL/PHP 5 API

189 190 191 193 197

PHP und PostgreSQL 215 PostgreSQL - Mehr als nur eine Alternative für Webanwendungen . 216 Beschaffung und Installation 217 Zugriff auf PostgreSQL ohne PHP 219 Zugriff auf PostgreSQL mit einem PHP basierenden Tool 223 PHP API für PostgreSQL 226 PHP und Oracle Oracle Terminologie Beschaffung, Installation, Konfiguration Zugriff auf Oracle ohne PHP PHP API für Oracle

233 233 235 252 256

PEAR Komponenten für Datenbanken Einführung PEAR::DB PEAR::MDB2 DB_QueryTool DB_DataObject

272 272 272 288 294 298

PHP 5 und SQLite Fetchmodi Query-Funktionen

301 302 303

Inhaltsverzeichnis

4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.6.10

Bewegen im Resultset Datenbank-Informationen PHP-Funktionen mit SQL aufrufen Fetch Funktionen Sonstige Funktionen Typenlosigkeit Administration Fazit

303 303 304 306 306 307 307 308

5

Zeichenmanipulation und mehr

309

5.1 5.1.1 5.1.2 5.1.3 5.1.4

PHP und Arrays Einführung Array-Funktionen Beispiele mit Arrays Fazit

309 310 314 321 328

5.2 5.2.1 5.2.2

Stringverarbeitung Grundlagen von Strings in PHP Stringfunktionen

328 328 336

5.3 5.3.1 5.3.2 5.3.3

Reguläre Ausdrücke mit PCRE Einführung Aufbau von Regulären Ausdrücken PCRE-Funktionen von PHP

341 341 343 353

5.4

Mehrsprachigkeit mit ext/gettext

361

5.5

Output Buffering und Compression

364

6

PHP und XML

6.1 6.1.1 6.1.2 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.2.8 6.2.9

6.2.10 DomDocumentF 6.2.11 DomNodeList-Mi 6.3 6.3.1

XPath HTML-Funktiom

6.4 6.4.1 6.4.2

Validierung DTD XML Schema . . .

6.4.3 6.4.4

Relax NG

6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5

XSLT Was ist XSLT?. Die XSL-Extensi( XSLT-Syntax... PHP-Syntax . . . PHP-Funktioner

Error Reporting

6.6 SAX-XML-Parse 6.6.1 Grundlegende Fi 6.6.2 Optionen 6.6.3 Weitere Callback 6.6.4 Error- Funktionei 6.6.5 Weitere Funktio]

371

6.7 6.7.1 6.7.2 6.7.3 6.7.4

xmlReader . . . . Syntax Validierung . . . Konvertierung zi Fazit

Einführung in XML, SAX und DOM Was ist XML? XML und PHP

371 371 375

6.8 6.8.1 6.8.2

SimpleXML . . . Beispiel Namespaces . . .

377 378 380 381 385 387 391 391 393 393

6.8.3 6.8.4 6.8.5 6.8.6

XPath

DOM Das DOM-Model Grundlegende ext/dom-Funktionen DomDocument-Attribute und -Methoden DomDocument Create Methoden Node-Methoden DomText Methoden DomElement-Methoden DomProcessinglnstruction-Methoden DomArtribute-Methoden

Konvertierung v Mixed Content-I Fazit

7

On-the-Fly Erzei

7.1 7.1.1 7.1.2

On-the-fly Bilde GD Graphen oder B PEAR::Image_G

Inhaltsverzeichnis

102.io DomDocumentFragment-Methoden 112.ii DomNodeList-Methoden

394 395

6.3 6.3.1

396 399

XPath HTML-Funktionen

6.4 Validierung 6.4.1 DTD 6.4.2 XML Schema 6.4.3 R e l a x N G 6.4.4 Error Reporting

400 401 402 404

405

6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.5.5

XSLT Was ist XSLT? Die XSL-Extension XSLT-Syntax PHP-Syntax PHP-Funktionen aus XSLT aufrufen

406 406 407 409 419 421

6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5

SAX-XML-Parser Grundlegende Funktionen eines XML-Parser-Objekts Optionen Weitere Callback-Funktionen Error-Funktionen Weitere Funktionen

422 423 425 426 428 430

6.7 6.7.1 6.7.2 6.7.3 6.7.4

xmlReader Syntax Validierung Konvertierung zu DOM Nodes Eazit

430 433 435 436 437

6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.8.6

SimpleXML Beispiel Namespaces xp ath Konvertierung von und zu DOM Mixed Content-Probleme Fazit

437 438 439 439 440 440 441

7

On-the-Fly Erzeugung von Bildern und PDF-Dokumenten

443

7.1 7.1.1 7.1.2

On-the-fly Bilder erzeugen GD Graphen oder Balkendiagramme mit PEAR::Image_Graph generieren

443 444 450

Inhaltsverzeichnis

1O

7.1.3

Image Magick Extension

455

7.2 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6

On-the-fly PDF erzeugen Das Adobe Portable Document Format Auswahl der richtigen PDF-Bibliothek für den Einsatz in PHP . . . . PDFlib Generierung einer Rechnung mit der PDFlib Alternative PDF-Bibliotheken für PHP Fazit

458 459 460 462 473 482 486

8

PHP und Netzwerkfunktionen

487

8.1 8.1.1 8.1.2 8.1.3

Mail und News Die Mail-Funktion von PHP Mails mit PEAR-Klassen senden Mails/news lesen mit IMAP

487 488 489 500

8.2 8.2.1 8.2.2 8.2.3 8.2.4

LDAP Einführung Zugriff auf OpenLDAP LDAP-API von PHP LDAP-Zugriff über PEAR::Auth

521 521 525 531 540

8.3 8.3.1 8.3.2

Socketprogrammierung Einführung in Sockets Socket-Funktionen in PHP

542 543 544

8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.4.6 8.4.7 8.4.8

cURL Installation Einführung FTP-Transfer mit cURL SSL-Unterstützung Multi-cURL cURL und LDAP Anwendungsszenarien Fazit

557 558 558 560 561 561 562 563 563

8.5 8.5.1 8.5.2

XMLRPC Einführung XMLRPC-Extension von PHP

564 564 574

8.6 8.6.1 8.6.2

SOAP Die Klasse SoapClient Die Klasse SoapServer

592 595 597

9

PHP Tiefen . . .

9.1

Streams Userland Streai Stream Context Stream-Filter . Userland Strea] Socket Streams

9.1.1 9.1.2

9.1.3 9.1.4 9.1.5 9.2 9.2.1 9.2.2

9.2.3 9.2.4 9.2.5 9.2.6 9.2.7

CLI: PHP und 1 Ein CLI Skript Basics: Ausgab Basics: Argum< Argumente ein Interaktive Ein Tabellen, Farb< Fazit

9-3-5

Cache-Techno] Einführung... Philosophie vc Wann setze id PHP-Cache-S) Fazit

9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5

PHP-GTK-G Einführung.. GTK+ und Ph Programmier« GUI-Entwurf Fazit

9-5

Die Reflectior

9-3 9.3.1 9.3.2 9-3-3 9.3.4

10

Projekt: Excel

10.1

Einleitung ..

10.2

Vorbereitung

10.3

Anwendungs

10.4

Umsetzung 1 Anwendungs 2 Datenerfassu 3 Fazit

10.4. 10.4. 10.4.

Inhaltsverzeichnis

9

PHP Tiefen

605

9.1 9.1.1 9.1.2 9.1.3 9.1.4 9.1.5

Streams Userland Stream Wrapper Stream Contexts Stream-Filter Userland Stream Filter Socket Streams

606 608 618 620 623 626

9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 9.2.6 9.2.7

CLI: PHP und die Kommandozeile Ein CLI Skript ausführen Basics: Ausgabe im Terminal Basics: Argumente einlesen Argumente einlesen mit Console_Getopt Interaktive Eingabe Tabellen, Farben, Fortschrittsbalken Fazit

632 632 633 634 635 639 640 644

9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5

Cache-Technologien Einführung Philosophie von Cache-Technologien Wann setze ich einen Cache sinnvoll ein? PHP-Cache-Systeme in der Praxis Fazit

644 644 645 647 648 653

9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5

PHP-GTK - GUI-Applikationen mit PHP Einführung GTK+ und PHP-GTK Programmieren mit PHP-GTK GUI-Entwurf mit Glade Fazit

653 653 655 660 674 683

9.5

Die Reflection-API

684

10

Projekt: Excel-Dokumente mit PEAR generieren

691

10.1

Einleitung

691

10.2

Vorbereitung und Einführung

691

10.3

Anwendungsziele und Anforderungen

692

10.4 10.4.1 10.4.2 10.4.3

Umsetzung Anwendungsentwicklung Datenerfassung durch Frontend Fazit

694 695 704 705

n

Inhaltsverzeichnis

12

11

Projekt: Webseite mit PEAR::DB, PEAR::Cache und ITX

707

11.i

Einleitung

707

11.2

Anforderungen

707

11.3 11.3.1 11.3.2 11.3.3 11.3.4

Umsetzung Gewählte Technologien Aufbau der Datenbank Vorgehen Fazit

708 708 709 710 723

12

Projekt: Wiederverwendbares Modul zur Verarbeitung von Datenbankabfragen, XML und XSL

725

12.1

Einleitung

725

12.2 12.2.1 12.2.2 12.2.3 12.2.4 12.2.5 12.2.6 12.2.7 12.2.8 12.2.9 12.2.10

Umsetzung Klassenattribute Konstruktor Funktionen zur Transformation zwischen Arrays und XML Einfügen von Daten Einfügen von Daten aus Formularen Löschen von Daten Abrufen von Daten Suche von Daten XSL-Transformation Diverse Funktionen

726 727 728 728 733 736 737 739 741 743 746

12.3

Fazit

748

13

Projekt: Adressbuch

749

13.1

Einleitung

749

13.2 13.2.1 13.2.2 13.2.3

Umsetzung Übersicht in HTML Editieren Ausgabe in WML

749 749 755 759

13.3

Fazit

764

14

Projekt: Ein Präsentationssystem mit XML und WYSIWYG

14.1

14.3.2 Popoon 14.3.3 BXE 14.3.4 Fazit A

PHP installiere!

A.i A.1.1 A.i.2 A.1.3 A.1.4 A.i. 5 A.1.6

Beschaffung un Beschaffung vo Hinweise für di PHP-Installatio PHP-Installatio Installation ver PHP testen...

A.2 A.2.1 A.2.2

php.ini: Konfig Einstellungen ] Sonstige Einst(

B

Beispieldatenb

B.i

Aufbau und D

B.2

Beispieldatenl:

B.3

Beispieldatenl:

B.4

Beispieldatenl

B.5

Beispieldatenl

C

Externe und v

C.i C.1.1 C.1.2 C.1.3 C.i.4

Buchtipps zu Datenbanken XML/XSLT. OOP und Sof Andere Then

765

C.2 C.2.1 C.2.2 C.2.3 C.2.4

WWW . . . . PHP Datenbanker Andere Therj Webseiten/B

Einleitung

765

C.3

Mailinglister

14.2

Anforderungen an die Software

765

C.4

IRC

14.3 14.3.1

Drei Teilsysteme SlideML

766 766

Stichwortvei

Inhaltsverzeichnis

und ITX

707 707 707 708 708 709 710 723

itung von 725 725

und XML

726 727 728 728 733 736 737 739

BXE

767

14.3.3 14.3.4 Fazit

774

A

PHP installieren und konfigurieren

779

A1 A.1.1 A.1.2 A.1.3 A.1.4 A.1.5 A.1.6

Beschaffung und Installation Beschaffung von PHP Hinweise für die PHP 5-Installation PHP-Installation auf Linux PHP-Installation auf Windows Installation verschiedener Extensions PHP testen

779 780 781 781 790 795 816

A.2 A.2.1 A.2.2

php.ini: Konfiguration nach der Installation Einstellungen für Sicherheit und Performance Sonstige Einstellungen

819 819 822

B

Beispieldatenbank

825

B.1

Aufbau und Datenbankstruktur

825

B.2

Beispieldatenbank für MySQL

827

777

B.3

Beispieldatenbank für PostgreSQL

828

741 743 746

B.4

Beispieldatenbank für Oracle

829

B.5

Beispieldatenbank für SQLite

829

748

C

Externe und weiterführende Quellen

831

749

C.1 C.1.1 C.1.2 C.1.3 C.1.4

Buchtipps zu anderen Themen Datenbanken XML / XSLT OOP und Softwaretechnik Andere Themengebiete

831 831 831 832 832

765

C.2 C.2.1 C.2.2 C.2.3 C.2.4

WWW PHP Datenbanken Andere Themengebiete Webseiten/Blogs der Autoren

832 832 833 834 834

765

C.3

Mailinglisten und Newsgroups

834

765

C-4

IRC

835

Stichwortverzeichnis

837

749 749 749 755 759 764

SIWYG

14.3.2 Popoon

766 766