Migration von PHP5 auf PHP7 leicht gemacht

Mehr und mehr Webhoster haben angekündigt, die mittlerweile veraltete PHP5-Version abzuschalten und zukünftig nur noch PHP7 zu unterstützen. Dies bereitet diversen alten Webanwendungen Probleme, da diese nicht kompatibel für PHP7 sind. Das Internet wandelt sich ständig, und so ist man auch bei PHP-Anwendung nicht vor teilweise schmerzhaften Versions-Migrationen geschützt.

In diesem Artikel zeige ich, wie eine schnelle Migration von PHP5 auf PHP7 gelingt für die meisten Anwendungen gelingt.

PHP5 wird zum Sicherheitsrisiko

Laut offiziellen Angaben wurde die Entwicklung von PHP5 im Januar 2017 eingestellt und seit Januar 2019 werden keine Sicherheitsupdates mehr für PHP5 entwickelt bzw. bereitgestellt. Damit wird der Einsatz von PHP5 zum potentiellen Sicherheitsrisiko.

Dieses ist insbesondere ein Sicherheitsrisiko für Shared-Webhosting-Anbieter, da durch Schwachstellen in PHP5 ggf. der Server kompromittiert werden könnte. Host Europe hat PHP5 beispielsweise bereits zum 24.10.2018 abgeschaltet.

Bei anderen Anbietern hat man noch etwas länger Zeit, aber es ist gewiss, dass diese irgendwann auch PHP5 abschalten werden.

Zulange sollte man mit der Migration deshalb nicht warten. Eine migrierte Website profitiert nicht nur von einer besseren Sicherheit, PHP7 ist, wie der PHP-Benchmark zeigt, auch bedeutend schneller als PHP5.

Umfangreiche Änderungen zwischen PHP5 zu PHP7

Im PHP-Manual findet sich ein ausführlicher Eintrag bzgl. Migration von PHP 5.6.x nach PHP 7.0.x, mit sämtlichen Änderungen in PHP7. Insbesondere wurden in PHP7 diverse Funktionen aus PHP5 entfernt, was alten Anwendungen große Probleme bereiten kann.

Wem der Artikel aus dem PHP-Manual zu lang ist, der kann sich meistens auf zwei Sachen bei der Migration fokussieren: Anpassung der mysql-Befehle und der ereg-Befehle.

Bei vielen Anwendung reicht es zum Glück, zwei kleine Wrapper per include zu laden, und schon sind alte Anwendung unter PHP7 lauffähig.

MySQL-Erweiterung mittels Wrapper weiter nutzen

Das häufigste Problem alter Anwendungen ist, dass diese die veraltete MySQL-Erweiterung nutzen, statt die moderne MySQLi-Erweiterung oder die PDO-Erweiterung. In PHP7 wurde die MySQL-Erweiterung vollständig entfernt, womit Befehle wie mysql_query() nicht mehr funktionsfähig sind.

Idealerweise empfiehlt es sich, die Anwendung per Hand auf MySQLi oder PDO zu migrieren.

Wem dies zu aufwendig ist, dem empfehle ich den MySQL wrapper for MySQLi.

Einfach die mysql.php aus dem Repository herunterladen und dem Projekt hinzufügen. Zu Beginn der Scripte muss dieser Wrapper per

geladen werden.

Die Anwendung selbst kann dann weiter die veralteten mysql_*-Befehle verwenden. Durch das Script werden diese bei PHP7 auf die MySQLi-Erweiterung gemappt.

So lässt sich die Anwendung meist ohne weitere Änderungen mit PHP7 nutzen. Da MySQLi gegenüber der MySQL-Erweiterung aber einige Verbesserungen beinhaltet, würde ich dennoch eine händische Anpassung der mysql-Befehle empfehlen sofern möglich.

Ereg-Befehle mittels Wrapper weiter nutzen

In PHP7 wurde die ereg-Befehle für z.B. das Suchen und Ersetzen mittels regulärer Ausdrücke entfernt. Stattdessen sollen die preg_*-Befehle in PHP7 genutzt werden.

Der Unterschied zwischen den ereg-Befehlen und den preg-Befehlen liegt im Start und Endzeichen:

Bei ereg konnte der reguläre Ausdruck unmittelbar geschrieben werden. Bei den preg-Befehlen muss ein spezielles Zeichen zu Beginn und Ende des regulären Ausdrucks stehen. Im obigen Beispiel muss der reguläre Ausdrück durch ein / zu Beginn und Ende ergänzt werden.

Wer die ereg-Befehle nicht per Hand anpassen will, für den empfiehlt sich ebenfalls ein Wrapper: Wrapper for PHP ereg extension

Zu Beginn eurer Scripte müsst ihr nur

einfügen und eure Anwendung kann weiterhin die veralteten ereg-Befehle nutzen.

 

Vorteile der PHP7 Migration

Durch eine Migration auf PHP7 erhöht ihr die Sicherheit eurer Anwendung. Ebenso profitiert ihr von einer deutlich besseren Performance. Wie der Benchmark zeigt, kann WordPress 5 unter PHP 7.3 fast drei Mal so viele Anfragen pro Sekunde bearbeiten wie noch PHP 5.6

Foto: Kinsta.com

Viele Anbieter bieten mit PHP7 ebenfalls OPcache an. Bei OPcache handelt es sich um einen Programm-Code-Cache für PHP. Eure PHP-Anwendung wird kompiliert und im Cache (standardmäßig im RAM) hinterlegt. Bei darauffolgenden Aufrufen muss euer Code nicht von der langsamen Festplatte geladen und langsam erneut kompiliert werden. Stattdessen wird die bereits kompilierte Version aus dem Cache verwendet.

Dies kann deutlich die Ladezeiten eurer Anwendungen reduzieren. PHP-Scripte die zuvor z.B. 0,5 Sekunden zum Laden gebraucht haben, benötigen mit Cache beispielsweise nur noch 0,1 Sekunden. Dies freut eure Website-Besucher, wenn eure Seite schneller lädt.

Leider bieten nicht alle Webhosting-Anbieter mit PHP7 auch automatisch OPcache an. Der Umstieg auf von der veralteten, tendenziell unsicheren PHP5 Version auf die PHP7 Version lohnt sich aber auf alle Fälle.

Autor:
Zurück zur Übersicht aller Beiträge