Suchen und Finden
Service
Infos und Kontakt
Mehr zum Inhalt
PHP migrieren - Konzepte und Lösungen zur Migration von PHP-Anwendungen und -Umgebungen
Inhalt
6
Vorwort
12
1 Einführung
14
1.1 Eine kurze Geschichte der Internet-Zeit
14
1.2 PHP erblickt das Licht der Welt
16
1.3 PHP 5 und die große Migration
18
1.4 Blick in die Zukunft: PHP 6
20
2 Strategien
22
2.1 Never touch a running system
23
2.1.1 Systemumgebung
24
2.1.2 Programmcode
26
2.2 Immer die neueste Version einsetzen
29
2.3 Auf der grünen Wiese beginnen
31
2.3.1 Programmcode von Grund auf neu entwickeln
32
2.3.2 Die Systemumgebung von Grund auf neu aufbauen
33
2.4 Den richtigen Mittelweg finden
34
3 Aspekte einer Migration
36
3.1 Plattform
38
3.1.1 Architektur
38
3.1.2 Prozessor
39
3.1.3 Instruction Set
40
3.1.4 Wortlänge
41
3.1.5 Byte-Reihenfolge
43
3.1.6 Bauformen und Schnittstellen
44
3.2 Betriebssystem
45
3.2.1 Wortlänge
48
3.2.2 Zeilenendezeichen
48
3.2.3 Zugriffsrechte
51
3.2.4 Pfade und Dateinamen
53
3.2.5 Temporäre Dateien
56
3.2.6 Der Dateisuchpfad
57
3.2.7 Zeichensätze
57
3.3 Datenbank
60
3.3.1 SQL ist nicht gleich SQL
61
3.3.2 Programmcode in der Datenbank
62
3.3.3 Datentypen
64
3.3.4 Zeichensätze
64
3.3.5 Backup und Restore
66
3.4 Webserver
69
3.4.1 Apache und Apache2
70
3.4.2 Sicherheit
71
3.4.3 Apache übersetzen
73
3.4.4 Mehrere Webserver auf einem Rechner
74
3.5 PHP
75
3.5.1 Integration mit dem Webserver
75
3.5.2 PHP übersetzen
80
3.5.3 Thread-Modell
81
3.5.4 Die PHP-Konfiguration
82
3.5.5 PHP-Erweiterungen
100
3.5.6 Mehrere PHP-Versionen installieren
107
3.6 PHP-Code
107
3.6.1 Code von Drittanbietern
108
3.6.2 Eigener PHP-Code
109
3.7 Externe Programme
110
3.8 Schnittstellen zu Drittsystemen
113
3.9 Zeichenkodierungen
114
3.10 Browser
122
3.11 Weitere Aspekte
124
3.11.1 Harte Limits
124
3.11.2 Sicherheit
126
3.11.3 Systemkonzept
127
4 Die Migration vorbereiten
130
4.1 Der Istzustand
131
4.2 Das Zielsystem
134
4.3 Die Migration planen
137
5 Die Migration durchführen
142
5.1 Vorbereitungen
144
5.1.1 Das erste Testsystem
144
5.1.2 Das zweite Testsystem
145
5.2 Testen
146
5.2.1 Relevante Testfälle finden
147
5.2.2 Testdaten finden
148
5.2.3 Tests programmieren
149
5.3 Refactoring
151
5.3.1 Redundanten Code eliminieren
152
5.3.2 Codeblöcke kürzen
153
5.3.3 Unterschiedliche Belange trennen
153
5.4 Migrieren
155
5.4.1 Altlasten beseitigen
156
5.4.2 Module ersetzen
157
5.4.3 Syntaxfehler beseitigen
158
5.4.4 Alle PHP-Fehlermeldungen beseitigen
158
5.4.5 Logische Fehler beseitigen
159
5.4.6 Die PHP-Konfiguration normieren
159
5.5 Das Live-System migrieren
160
5.6 Die Migration abschließen
163
6 Nach der Migration
166
6.1 Gesammelte Erfahrungen
166
6.1.1 Modular programmieren
167
6.1.2 Coding Guidelines etablieren
167
6.1.3 Defensiv programmieren
167
6.1.4 Nicht der Erste sein
168
6.1.5 Laufendes Refactoring
169
6.1.6 Agile Migration
170
7 Werkzeuge
172
7.1 Versionsverwaltung
173
7.2 Kommandozeilenwerkzeuge
174
7.2.1 HTTP-Anfragen senden und Dateien herunterladen: wget
174
7.2.2 Dateien und Verzeichnisse durchsuchen: grep
176
7.2.3 Ersetzungen in Dateien vornehmen: sed
177
7.2.4 Dateien und Verzeichnissen vergleichen: diff-Werkzeuge
177
7.3 (X)HTML-Dateien validieren
179
7.3.1 Der W3C-Validator
181
7.3.2 HTML Tidy
183
7.3.3 Die PHP-Erweiterung Tidy
185
7.4 CSS-Dateien validieren
187
7.5 XML-Dateien validieren
189
7.5.1 xmllint
189
7.5.2 PHP
191
7.6 Statische Analyse von JavaScript-Dateien
191
7.6.1 jsl
192
7.6.2 JSLint
193
7.7 Firefox-Erweiterungen
195
7.7.1 Webdeveloper
195
7.7.2 XPather
197
7.7.3 Firebug
198
7.8 PHP-Bordmittel
200
7.8.1 PHP-Konfiguration
200
7.8.2 Syntaxprüfung
203
7.8.3 Prepend- und Append-Dateien
204
7.9 PEAR-Komponenten
205
7.9.1 PHP_Compat
207
7.9.2 PHP_Beautifier
208
7.9.3 PHP_CodeSniffer
212
7.9.4 PHP_CompatInfo
218
7.10 Virtuelle Maschinen
220
7.10.1 VMWare
221
7.10.2 Eine virtuelle Maschine installieren
222
7.10.3 Mit Snapshots arbeiten
224
7.11 Testwerkzeuge
225
7.11.1 Komponententests mit PHPUnit
226
7.11.2 Systemtests mit Selenium
229
7.12 Programmanalyse und Debugging
238
7.12.1 Installation
238
7.12.2 Nützliche Features
239
7.12.3 Tracing
239
7.12.4 Debugging
241
7.12.5 Codeabdeckung
244
7.13 Build-Automation
245
7.13.1 Installation
245
7.13.2 Codequalitätssicherung
246
7.13.3 Testautomation
248
7.13.4 Codeabdeckungsstatistiken
250
8 PHP-Code migrieren
252
8.1 Groß- und Kleinschreibung
253
8.1.1 Variablen
255
8.1.2 Konstanten
256
8.1.3 Magische Konstanten
259
8.1.4 Funktionen und Methoden
260
8.1.5 Klassen
261
8.1.6 Dateien
262
8.2 Namenskonflikte
263
8.2.1 Reservierte Schlüsselwörter
264
8.2.2 Funktionen
267
8.2.3 Klassen, Interfaces und Exceptions
268
8.2.4 Konstanten
271
8.2.5 Magische Konstanten, Funktionen und Methoden
274
8.2.6 Variablen
274
8.2.7 Komponenten und Bibliotheken
276
8.3 Verarbeitung von Eingabedaten
279
8.3.1 Globale Variablen registrieren
279
8.3.2 Lange Eingabe-Arrays
282
8.3.3 Superglobale Variablen
282
8.3.4 Magic Quotes
283
8.3.5 Auf POST-Daten zugreifen
287
8.3.6 Skriptname: $PHP_SELF
288
8.4 Fehlerbehandlung
289
8.4.1 Fehler unterdrücken mit @
290
8.4.2 Die letzte Fehlermeldung speichern
291
8.4.3 Die Fehleranzeige konfigurieren
292
8.4.4 Neue und geänderte Fehlermeldungen
293
8.4.5 Eigene Fehler-Handler
296
8.4.6 Exceptions
298
8.5 Referenzen
298
8.5.1 Der PHP 4-Kompatibilitätsmodus
299
8.5.2 Eine Referenz erzeugen
300
8.5.3 Referenzen übergeben
301
8.5.4 Referenzen zurückgeben
303
8.5.5 Zur Laufzeit Referenzen übergeben
304
8.5.6 Objekte kopieren
305
8.6 Magische Konstanten
306
8.7 Geändertes Verhalten von PHP-Funktionen
308
8.7.1 array_merge()
308
8.7.2 ip2long()
310
8.7.3 strrpos()
310
8.7.4 strripos()
311
8.7.5 strtotime()
311
8.8 Klassen
312
8.8.1 Statische Methoden und dynamische Aufrufe
312
8.8.2 Abstrakte private Methoden
313
8.8.3 Abstrakte statische Methoden
313
8.8.4 Geänderte Methodensignatur in abgeleiteten Klassen
314
8.9 Objekte
315
8.9.1 Konstruktor
315
8.9.2 Destruktoren
317
8.9.3 Klassenkonstanten neu definieren
318
8.9.4 instanceOf anstelle von is_a()
318
8.9.5 Namenskonflikte mit $this
319
8.9.6 $this neu zuweisen
320
8.9.7 Objekte vergleichen
321
8.10 Dynamische Aufrufe
321
8.10.1 Systemaufrufe
322
8.10.2 Klassennamen
323
8.10.3 Die call_user_func()-Familie
324
8.10.4 Nachgeladener Code
326
8.10.5 eval
327
8.11 Kleine Gemeinheiten
328
8.11.1 unset() und Zeichenketten
328
8.11.2 Fehler beim Senden der HTTP-Header
329
8.11.3 Datums- und Zeitfunktionen
331
8.11.4 Modulo-Division
331
8.11.5 Falsche Parameteranzahl in Funktionsaufrufen
332
8.11.6 Automatisches Umwandeln von Integer-Werten
334
8.11.7 Leere Objekte
335
8.11.8 $this, Delegation und statische Aufrufe
335
8.11.9 Objekte ausgeben und die magische Methode __toString()
337
8.12 PHP-Erweiterungen
337
8.12.1 mysql und mysqli
338
8.12.2 SPL
339
8.12.3 Tidy
339
8.12.4 Tokenizer
339
8.12.5 XML
339
Literatur
342
Register
346
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion





















