Einleitung | 6 |
Inhaltsverzeichnis | 10 |
Teil I – PHP | 20 |
1 Internet-/Intranettechnologien | 22 |
1.1 CGI – Common Gateway Interface | 22 |
1.2 Dynamische Webseiten | 23 |
1.2.1 PHP als Skriptsprache | 24 |
1.3 Wie arbeitet PHP? | 24 |
1.4 PHP & HTML | 26 |
1.5 Wie funktioniert eine Webanwendung? | 27 |
1.6 Software für Webanwendungen | 28 |
1.7 Datenbanken | 32 |
1.7.1 Kompatibilität zu SQL-Standards | 33 |
1.7.2 Eigenschaften von MySQL | 34 |
1.7.3 MySQL-Anwendungsgebiete | 35 |
2 Installation und Konfiguration | 38 |
2.1 Vorbereitung | 38 |
2.2 Installation unter Windows | 39 |
2.2.1 WAMP | 39 |
2.2.2 Apache konfigurieren | 40 |
2.2.3 Installation von PHP unter Windows | 41 |
2.3 Installation unter Linux | 42 |
2.3.1 LAMP | 42 |
2.3.2 Installation von PHP als CGI-Programm | 42 |
2.3.3 Installation von PHP als Apache-Modul | 42 |
2.4 Installations-Kits | 43 |
2.4.1 XAMPP | 43 |
2.4.2 Apache 2 Triad | 50 |
2.4.3 WAMP5 | 52 |
2.4.4 MAMP | 53 |
2.4.5 Installations-Kits und Sicherheit | 53 |
2.5 PHP-Konfiguration | 54 |
2.5.1 Syntax der Init-Datei | 54 |
2.5.2 Sprachoptionen | 54 |
2.5.3 Leistungsbegrenzungen | 55 |
2.5.4 Fehlerbehandlung und Protokollierung | 55 |
2.5.5 Datenbehandlung | 56 |
2.5.6 Pfade und Verzeichnisse | 57 |
2.5.7 PHP-Erweiterungen für Windows | 58 |
2.5.8 Moduleinstellungen | 58 |
2.6 Sicherheit | 60 |
2.6.1 Sicherheitsprobleme | 60 |
2.6.2 Angriffsszenarien | 61 |
2.7 Internet Service Provider und PHP | 62 |
2.7.1 Zugangsdaten | 62 |
2.7.2 Angebote von Providern | 62 |
2.8 Überprüfen der Konfiguration | 63 |
2.9 MySQL – Installation | 65 |
2.9.1 Installation des MySQL-Datenbankservers | 67 |
2.9.2 Installation auf Unix-/Linux-Systemen | 67 |
2.9.3 Installation auf Windows-Systemen | 70 |
2.9.4 Installation überprüfen | 71 |
2.9.5 Kommandozeilenwerkzeuge von MySQL | 72 |
2.9.6 Weitere Hilfsprogramme | 74 |
2.9.7 Grafische MySQL-Clients | 75 |
2.9.8 Anwendungen der MySQL-AB-Gruppe | 85 |
2.9.9 Anwendung zur Datenbankmodellierung | 90 |
2.10 Entwicklungsumgebungen | 93 |
2.10.1 Entwicklungsumgebungen und Editoren | 93 |
2.10.2 Zend Studio | 94 |
2.10.3 Eclipse PDT | 95 |
2.10.4 Aptana Studio PHP | 95 |
2.10.5 NetBeans IDE | 96 |
2.10.6 Adobe Dreamweaver CS3 | 97 |
2.10.7 Macromedia Dreamweaver 8 | 98 |
3 Sprachelemente und Syntax | 100 |
3.1 Integration von PHP | 100 |
3.1.1 Notationshinweise | 101 |
3.1.2 Einbindung externer Skripts | 101 |
3.2 Einführung in PHP | 103 |
3.2.1 Ausdrücke | 103 |
3.2.2 Anweisungen | 106 |
3.2.3 Codezeile | 107 |
3.2.4 Semikolons | 107 |
3.2.5 Leerzeichen | 109 |
3.2.6 Groß- und Kleinschreibung | 110 |
3.2.7 Geschweifte Klammern | 110 |
3.2.8 Runde Klammern | 111 |
3.2.9 Schlüsselwörter | 111 |
3.2.10 Zuweisungen | 112 |
3.2.11 Echo-Befehl | 113 |
3.2.12 Print-Befehl | 113 |
3.2.13 Unterschied zwischen echo und print | 114 |
3.2.14 Heredoc | 114 |
3.2.15 Kommentare | 116 |
3.3 Datentypen | 118 |
3.3.1 Strings/Zeichenketten | 118 |
3.3.2 Zahlen | 123 |
3.3.3 Boolesche Werte | 128 |
3.3.4 Objekte | 131 |
3.3.5 Arrays | 132 |
3.3.6 Resource Type | 137 |
3.3.7 NULL | 137 |
3.3.8 Besonderheiten der verschiedenen Typen | 138 |
3.3.9 Typumwandlung | 140 |
3.3.10 Datentypen bestimmen | 143 |
3.4 Variablen | 146 |
3.4.1 Was ist eine Variable? | 146 |
3.4.2 Variablendefinition | 147 |
3.4.3 L- und R-Wert | 148 |
3.4.4 Benennen von Variablen | 149 |
3.4.5 Variablenwerte | 149 |
3.4.6 Umwandeln und Prüfen von Variablen | 152 |
3.4.7 Gültigkeitsbereiche und Sichtbarkeit von Variablen | 156 |
3.4.8 Dynamische Variablen | 158 |
3.4.9 Vordefinierte Variablen | 160 |
3.4.10 Einsatz von register_globals | 162 |
3.5 Konstanten | 166 |
3.5.1 Vordefinierte Konstanten | 166 |
3.6 Operatoren | 167 |
3.6.1 Operator-Rangfolge | 168 |
3.6.2 Vorrang der Operatoren | 169 |
3.6.3 Assoziativität der Operatoren | 169 |
3.6.4 Arithmetische Operatoren | 170 |
3.6.5 Zuweisungsoperator | 171 |
3.6.6 Vergleichsoperatoren | 174 |
3.6.7 Gleichheitsoperatoren | 177 |
3.6.8 Logische Operatoren | 179 |
3.6.9 Bit-Operatoren | 181 |
3.6.10 String-Operator | 185 |
3.6.11 Konditionaloperator | 185 |
3.6.12 Gruppierungsoperator | 186 |
3.6.13 Inkrement- bzw. Dekrementoperatoren | 187 |
3.6.14 Objekterzeugungs-Operator | 188 |
3.6.15 Array-Operatoren | 189 |
3.6.16 Operatoren zur Programmausführung | 190 |
3.6.17 Fehlerkontroll-Operatoren | 190 |
3.7 Kontrollstrukturen | 191 |
3.7.1 if-Anweisung | 191 |
3.7.2 if-else-Anweisung | 194 |
3.7.3 if-elseif-Anweisung | 196 |
3.7.4 switch-case-Anweisung | 198 |
3.7.5 while-Schleife | 201 |
3.7.6 do-while-Schleife | 203 |
3.7.7 for-schleife | 204 |
3.7.8 foreach-Schleife | 207 |
3.7.9 Verschachtelte Kontrollstrukturen | 209 |
3.7.10 break | 211 |
3.7.11 continue | 211 |
3.8 Funktionen und Prozeduren | 212 |
3.8.1 Funktionsargumente | 213 |
3.8.2 Vorgabewerte für Parameter | 215 |
3.8.3 Variable Argumentlisten | 215 |
3.8.4 Rückgabewerte | 217 |
3.8.5 Fehlercode als Rückgabewert | 217 |
3.8.6 Dynamisch Funktionen erzeugen | 218 |
3.8.7 Bedingte Funktionen | 219 |
3.8.8 Verschachtelte Funktionen | 219 |
3.8.9 Variablenfunktionen | 221 |
3.8.10 Rekursive Funktionen | 222 |
3.9 Referenzen in PHP | 227 |
3.9.1 Was sind Referenzen? | 227 |
3.9.2 Was leisten Referenzen? | 227 |
3.9.3 Referenzen aufheben | 229 |
3.9.4 Referenzen entdecken | 230 |
3.10 Arrays | 230 |
3.10.1 Was sind Arrays? | 231 |
3.10.2 Terminologie | 231 |
3.10.3 Arrays erzeugen | 231 |
3.10.4 Arrays löschen | 234 |
3.10.5 Mehrdimensionale Arrays | 234 |
3.10.6 Arrayfunktionen | 239 |
3.10.7 Funktionen für mehrere Elemente | 246 |
3.10.8 Sortierfunktionen | 251 |
3.10.9 Sonstige Arrayfunktionen | 255 |
3.10.10 Nützliche Arrayfunktionen | 258 |
3.10.11 Nützliche Arrayoperationen | 279 |
3.11 Mathematische Funktionen | 280 |
3.11.1 Umwandlungsfunktionen | 280 |
3.11.2 Mathematische Konstanten | 283 |
3.11.3 Zufallszahlen | 283 |
3.12 Datums- und Zeitfunktionen | 286 |
3.12.1 Kalenderfunktionen | 286 |
3.12.2 Datumsfunktionen | 288 |
3.12.3 Zeitfunktionen | 292 |
3.13 Stringfunktionen | 298 |
3.13.1 Ersetzen von Zeichen in Zeichenketten | 298 |
3.13.2 Umwandeln, Teilen und Verbinden von Zeichenketten | 300 |
3.13.3 Suchen und Vergleichen von Zeichenketten | 303 |
3.13.4 Ausgabe von Zeichen und Zeichenketten | 306 |
3.13.5 URL- und HTML-spezifische Zeichenkettenfunktionen | 308 |
3.13.6 Zusätzliche Funktionen | 312 |
4 Programmierung mit PHP | 318 |
4.1 Formulare und PHP | 318 |
4.1.1 GET und POST | 318 |
4.1.2 Ermitteln von Formulardaten | 320 |
4.1.3 Auswertung von Formularen | 323 |
4.1.4 Formularelemente auf Existenz prüfen | 326 |
4.1.5 Dynamische Formulare | 327 |
4.1.6 Formulare über mehrere Seiten | 330 |
4.1.7 Fragen zu Formularelementen | 332 |
4.1.8 Prüfen auf fehlende oder fehlerhafte Eingaben | 334 |
4.1.9 Formulardaten und globale Servervariablen | 335 |
4.2 Daten via URL | 337 |
4.2.1 Kodierung von Daten | 338 |
4.2.2 Achtung – Escape-Zeichen | 339 |
4.2.3 Arbeiten mit dem $QUERY_STRING | 339 |
4.2.4 Gleichlautende Variablen | 341 |
4.3 Cookies via PHP | 342 |
4.3.1 Spezifikation von Cookies | 342 |
4.3.2 Cookies in PHP | 344 |
4.3.3 Cookies löschen | 350 |
4.4 Session-Management via PHP | 350 |
4.4.1 Konfiguration des Session-Moduls | 351 |
4.4.2 Session-Funktionen in PHP | 353 |
4.4.3 Weitergabe der Session-ID über Cookies | 357 |
4.4.4 Weitergabe der Session-ID über GET/POST | 358 |
4.4.5 Weitergabe der Session-ID über header() | 359 |
4.5 Überprüfung des Verbindungsstatus | 359 |
4.6 Servervariablen | 360 |
4.6.1 CGI-Umgebung | 360 |
4.6.2 Erzeugen von eigenen Logfiles | 361 |
4.7 Dateisystem via PHP | 363 |
4.7.1 Informationen über Dateien und Verzeichnisse | 363 |
4.7.2 Verzeichnisoperationen | 366 |
4.7.3 Berechtigungen von Dateien und Verzeichnissen | 367 |
4.7.4 Auslesen von Verzeichnissen | 369 |
4.7.5 Dateioperationen und Dateifunktionen | 371 |
4.7.6 Lesen und Schreiben von Dateien | 373 |
4.7.7 Erzeugen und Schreiben von Dateien | 378 |
4.7.8 Kopieren, Umbenennen und Löschen von Dateien | 380 |
4.7.9 Serialisierung von Daten | 381 |
4.7.10 Verriegelung von Dateien | 382 |
4.7.11 Auslesen von CSV-Dateien | 383 |
4.7.12 Nützliche Dateioperationen | 384 |
4.7.13 Nützliche Verzeichnisoperationen | 390 |
4.7.14 Datei-Upload via HTML-Formular | 394 |
5 Objektorientierte Programmierung mit PHP 5 | 404 |
5.1 Der Umgang mit Klassen und Objekten | 404 |
5.1.1 Klassendefinition in PHP 5 | 405 |
5.1.2 Objekte erzeugen und verwenden | 406 |
5.1.3 Konstruktoren und Destruktoren | 407 |
5.1.4 Zugriffsbeschränkung (Datenkapselung) | 408 |
5.1.5 OOP – Rundgang | 409 |
5.1.6 Objekte klonen | 412 |
5.1.7 Klassenvererbung in PHP 5 | 416 |
5.1.8 Finale Klassen und Methoden | 417 |
5.1.9 Abstraktion von Klassen und Methoden | 417 |
5.1.10 Interface – Objektschnittstellen | 420 |
5.1.11 Statische Eigenschaften und Methoden | 422 |
5.1.12 Verweisoperator/Gültigkeitsbereichsoperator (::) | 424 |
5.1.13 Klassenkonstanten | 426 |
5.1.14 Objekte – Referenzen und Kopien | 427 |
5.1.15 Magische Methoden (Interzeptormethoden) | 428 |
5.1.16 Typen-Hinweise (class type hints) | 433 |
5.1.17 Ausnahmebehandlung | 435 |
5.1.18 Dereferenzierung von Objekten | 440 |
5.1.19 Einsatz von instanceof | 442 |
5.1.20 Neue Konstante __METHOD__ | 442 |
5.1.21 Entwurfsmuster (Design Patterns) | 444 |
5.1.22 Anpassung von PHP 4 auf PHP 5 | 447 |
5.1.23 Praxis – Lebewesen | 448 |
6 Neuerungen in PHP 5.3 | 452 |
6.1 Syntax | 452 |
6.1.1 Heredoc-Syntax | 452 |
6.1.2 Nowdoc-Syntax | 453 |
6.1.3 Lambda-Funktionen | 453 |
6.1.4 Closures | 455 |
6.2 Funktionen und Parameter | 459 |
6.2.1 Funktionen | 459 |
6.2.2 Parameter | 463 |
6.2.3 Konstanten | 464 |
6.3 Veraltet und wiederbelebt | 465 |
6.3.1 Veraltet | 465 |
6.3.2 Wiederbelebt | 466 |
6.4 Objektorientierte Programmierung | 466 |
6.4.1 Namespaces (Namensräume) | 466 |
6.4.2 Late Static Bindings | 472 |
6.4.3 Exkurs – Geschachtelte Exceptions | 476 |
6.4.4 Exkurs – Funktionsobjekte | 476 |
6.5 Datenbankspezifische Neuerungen | 477 |
6.5.1 Sqlite3 | 477 |
6.5.2 Client-/Server-Bibliothek mysqlnd | 477 |
6.5.3 Standard PHP Library (SPL) | 478 |
6.5.4 Garbage Collection | 478 |
6.5.5 Erweiterungen intl und fileinfo | 480 |
7 Datenbankprogrammierung | 482 |
7.1 MySQL und PHP | 482 |
7.1.1 MySQLi-Installation | 483 |
7.1.2 MySQLi – erste Gehversuche | 484 |
7.1.3 MySQLi und SQL-Abfragen | 485 |
7.1.4 Referenz zur MySQLi-Unterstützung | 488 |
7.1.5 Referenz zur MySQL-Unterstützung | 491 |
7.2 Verwaltung von MySQL-Benutzern | 496 |
7.2.1 Anlegen und Bearbeiten von Benutzern | 497 |
7.3 PHP und MySQL-Verbindung | 499 |
7.4 PHP und MySQL-Zugriffe | 503 |
7.4.1 Datenbank erstellen | 503 |
7.4.2 Datenbanktabelle erstellen | 504 |
7.4.3 Datenverwaltung | 507 |
7.4.4 Datenbanken und Tabellen löschen | 520 |
7.4.5 Datenbanktabellen ändern | 521 |
7.4.6 Verknüpfte Tabellen (WHERE/JOIN) | 524 |
7.4.7 Tabellen vereinigen (UNION) | 534 |
7.5 Backups von Daten und Tabellen | 538 |
7.5.1 Sichern von Struktur und Daten | 539 |
7.5.2 Ausführung von gespeicherten SQL-Befehlen | 540 |
Teil II – MySQL | 542 |
8 Installation | 544 |
8.1 MySQL-Server installieren | 545 |
8.1.1 Installation auf Unix-/Linux-Systemen | 545 |
8.1.2 Installation auf Windows-Systemen | 548 |
8.1.3 Installation überprüfen | 550 |
8.1.4 Die Konfigurationsdatei my.cnf / my.ini | 551 |
8.1.5 Zeichensätze/Lokalisierung | 552 |
8.1.6 MySQL-Installation aktualisieren | 554 |
8.1.7 Mehrere MySQL-Server auf einem Rechner | 554 |
8.1.8 LAMP (Linux-Apache-MySQL-PHP) | 556 |
8.1.9 WAMP (Windows-Apache-MySQL-PHP) | 557 |
8.2 MySQL bei Internet-Service-Providern | 558 |
8.2.1 Angebote | 558 |
8.2.2 Funktionsumfang von MySQL feststellen | 558 |
8.2.3 Server-Sharing (Webspace) | 559 |
8.2.4 Eigener Webserver mit MySQL | 560 |
8.3 Kommandozeilenwerkzeuge von MySQL | 561 |
8.3.1 mysql – die SQL-Shell | 561 |
8.3.2 mysqladmin | 563 |
8.3.3 mysqlshow | 563 |
8.3.4 Weitere Hilfsprogramme | 563 |
9 Datenbankentwurf | 566 |
9.1 Phasen der Datenbankentwicklung | 566 |
9.2 Datenbankmanagementsysteme | 567 |
9.3 Datenmodell | 568 |
9.4 Datenbankentwurf mit ERM | 569 |
9.5 Relationales Datenmodell | 572 |
9.6 Primärschlüssel | 573 |
9.7 Fremdschlüssel und referenzielle Integrität | 573 |
9.8 Optimierung des Datenmodells | 575 |
9.9 Implementierung und Nutzung von SQL | 581 |
9.9.1 DCL-Befehle | 581 |
9.9.2 DML-Befehle | 581 |
9.9.3 DDL-Befehle | 582 |
10 Datenbanken und Tabellen | 584 |
10.1 Datentypen | 585 |
10.1.1 Zeichenketten-Datentypen | 588 |
10.1.2 Numerische Datentypen | 589 |
10.1.3 Datums- und Zeitdatentypen | 590 |
10.1.4 Aufzählungen | 591 |
10.1.5 Datentyp-Mapping | 591 |
10.1.6 Datentypenübersicht | 592 |
10.2 Datenbank anlegen und löschen | 595 |
10.3 Tabellen | 598 |
10.3.1 Tabellen anlegen | 598 |
10.3.2 Schlüsselfelder für Tabellen | 600 |
10.3.3 Indizes für Tabellen | 601 |
10.3.4 Tabellentypen | 603 |
10.3.5 Autowert definieren, Tabellen kopieren | 612 |
10.3.6 Fremdschlüssel (FOREIGN KEY) | 613 |
10.3.7 Ändern des Tabellenlayouts (ALTER TABLE) | 614 |
10.3.8 Tabellen umbenennen und löschen | 618 |
11 Arbeiten mit Daten | 620 |
11.1 Benutzerwerkzeuge und -schnittstellen | 620 |
11.2 Daten einfügen, ändern und löschen | 621 |
11.2.1 Einfügen von Daten in Tabellen | 621 |
11.2.2 Daten aktualisieren | 624 |
11.2.3 Daten löschen | 626 |
11.2.4 Daten aus anderen Datenbanken bzw. Programmen übernehmen | 628 |
11.3 Befehle für die Datenausgabe | 636 |
11.3.1 Abfragen mit SELECT | 636 |
11.3.2 Vergleichsoperatoren | 640 |
11.3.3 Abfragen mit logischen Operatoren | 642 |
11.3.4 Mathematische Funktionen | 643 |
11.3.5 Datums- und Zeitfunktionen | 643 |
11.3.6 Zeichenketten | 650 |
11.3.7 Auswahlanweisungen | 655 |
11.3.8 Zählen | 657 |
11.3.9 Tabellen vereinigen (UNION) | 658 |
11.3.10 Verknüpfte Tabellen | 659 |
11.3.11 Ausgabe sortieren | 664 |
11.3.12 Deutsche Sortierung | 665 |
11.3.13 Ausgabedatei über SELECT erzeugen | 666 |
11.3.14 Abfragen analysieren | 666 |
11.3.15 NULL-Marken | 668 |
11.4 Unscharfe Suche | 669 |
11.4.1 Suche mit LIKE und IN | 669 |
11.4.2 Volltextsuche | 670 |
11.4.3 Soundex | 673 |
11.4.4 Reguläre Ausdrücke | 674 |
11.5 Abfragen beschleunigen | 677 |
11.5.1 Query Cache | 677 |
11.6 Transaktionen | 679 |
11.7 Benutzerdefinierte Funktionen | 680 |
11.7.1 CREATE FUNCTION – Erzeugen von Funktionen | 681 |
11.7.2 DROP FUNCTION – Löschen von Funktionen | 682 |
11.8 Vorbereitete Anweisungen | 682 |
12 Verwaltung und Sicherheit | 684 |
12.1 Laufenden Betrieb überwachen | 684 |
12.2 Protokollierung von Servervorgängen | 686 |
12.2.1 Das Fehlerprotokoll | 686 |
12.2.2 Laufende Betriebprotokollierung | 686 |
12.3 Tabellenüberprüfung und -wartung | 690 |
12.3.1 Tabellenüberprüfung | 690 |
12.3.2 MyISAM-Tabellen reparieren | 692 |
12.3.3 Tabellen optimieren | 693 |
12.4 Sicherheit | 695 |
12.4.1 Passwortsystem | 695 |
12.4.2 Daten verschlüsselt speichern | 704 |
12.4.3 SSH-Verbindungen | 705 |
12.4.4 SSL-verschlüsselte Verbindungen | 706 |
12.5 Backup und Datensicherung | 710 |
12.5.1 Grundsätzliche Strategien für die Datensicherung | 710 |
12.5.2 Backup mit mysqldump | 712 |
12.5.3 Backup durch Datenbankkopie | 715 |
12.5.4 Backup mit BACKUP TABLE | 715 |
12.5.5 Datensicherung mit SELECT INTO OUTFILE | 716 |
12.5.6 Replikationsmechanismen von MySQL | 716 |
12.6 Uploads und Datensicherung bei Providern | 718 |
12.7 Datenbanktests durchführen | 720 |
Teil III – Anhänge | 722 |
A Sicherheit | 724 |
A.1 Schwachstellen und Gefahren | 724 |
A.2 Webanwendungen und Sicherheit | 726 |
B CD-ROM und www.buch.cd | 728 |
B.1 Kapitel | 728 |
B.2 Installations-Kits | 728 |
B.3 PHP-Entwicklungsstudio | 728 |
B.4 MySQL-Tools | 728 |
B.5 Bonuskapitel | 728 |
B.6 Zusätzlich auf www.buch.cd | 729 |
Nachwort | 730 |
Stichwortverzeichnis | 732 |