PHP 5 → 7 Migration¶
Historisch
Abgeschlossener Migrationsprozess. Alle Skripte sind auf PHP 7 portiert.
Überblick¶
Die Portierung aller Sachpool-Skripte von PHP 5.x auf PHP 7.3+ war einer der Hauptaufwände der Migration. PHP 7 entfernte mehrere in PHP 5 noch vorhandene Schnittstellen ersatzlos.
mysql → mysqli¶
Problem¶
Der alte mysql-Befehlssatz (PHP 5) ist in PHP 7 komplett entfernt.
Alle Datenbankzugriffe mussten auf mysqli umgestellt werden.
Vorgehen¶
Fast alle Funktionen existieren 1:1 als mysqli-Variante.
Unterschied: mysqli-Befehle benötigen die Datenbankverbindung als expliziten Parameter.
// Alt (PHP 5, nicht mehr funktionsfähig):
$result = mysql_query($query);
$row = mysql_fetch_array($result);
// Neu (PHP 7):
$result = mysqli_query($db, $query);
$row = mysqli_fetch_assoc($result); // Typ muss explizit sein
Wichtige Unterschiede¶
| Alt | Neu | Hinweis |
|---|---|---|
mysql_query($q) |
mysqli_query($db, $q) |
$db immer übergeben |
mysql_fetch_array() |
mysqli_fetch_assoc() |
Typ explizit angeben |
mysql_real_escape_string($s) |
mysqli_real_escape_string($db, $s) |
$db nötig |
Weitere PHP-Änderungen¶
@-Operatoren entfernt¶
@-Operatoren unterdrücken jede Fehlerausgabe und verhindern Debugging.
Alle wurden entfernt und durch eigene Fehlerbehandlung ersetzt.
isset()-Prüfung vor in_array()¶
In PHP 7 strict: in_array() akzeptiert keine undefinierten Variablen mehr.
// Alt (PHP 5, in PHP 7 Fehler):
if (in_array($value, $array)) { ... }
// Neu (PHP 7):
if (isset($value) && in_array($value, $array)) { ... }
Multiple Deklarationen¶
include() → require_once() / include_once(), um Mehrfachdeklarationen zu vermeiden.
Hartkodierte Pfade¶
Alle hardkodierten Pfade wurden in zentrale Konfigurationsparameter ausgelagert.
Zeichensatz¶
Alle Inhalte wurden auf UTF-8 portiert.
ISO-8859-1 und ANSI/CP-1252 werden nicht mehr verwendet.
utf8_encode() ist damit überflüssig.
HTML-Kompatibilität¶
- HTML 4.01 Transitional → HTML 5
<head>/<body>-Trennung wird jetzt respektiert- DOM-vollständige Ausgabe für alle Modulkapselungen