Plötzlich PHP 7 So retten Sie Ihre Webseite
Derzeit stellen viele Hosting Anbieter ihre Webspaces zwangsweise auf PHP 7 um. Das führt oft zu unschönen Überraschungen, bis hin dazu, dass ganze Webseiten beim Aufruf leer bleiben. Das kann jede Webseite betreffen, die kleinste und die größte.
Fast immer geben sich die Anbieter der Webspaces Mühe, ihre Kunden rechtzeitig zu informieren. Aber wer liest als Kunde schon den Newsletter? Oder muss das Fachchinesisch verstehen? Sehr häufig weiß man selbst als Kunde nicht, was eine Umstellung der PHP Version bedeutet. Erst wenn die eigene Webseite leer bleibt, wird klar, was die Ankündigungsmails der Hoster bedeutet haben. Schon vorab sei gesagt: Ins solchen Fällen ist ein Programmierer gefragt, denn für all jene Webseitenbetreiber ohne Programmierkenntnisse sind die erforderlichen Anpassungen schlicht nicht machbar.
Aber ans Eingemachte: Was steckt denn eigentlich dahinter und wie kann man das vielleicht doch wieder lösen?
Was ist PHP 7?
Zuerst die Grundlagen: PHP ist eine Skriptsprache, die dazu dient dem Server mitzuteilen welchen Quelltext(HTML-Informationen, Bilder und andere Dateien) er an den Browser eines Internetnutzers liefern soll, der eine Webseite aufruft. Zwar nutzen nicht alle Webseiten PHP aber doch ein wesentlicher Teil. Laut Wikipedia waren es Ende des Jahres 2015 immerhin 82% aller Webseiten. Schon seit dem 04.12.2015 gibt es PHP in der Version 7. Der Vorgänger von PHP 7 ist PHP 5, welches seit 2004 verwendet wurde. Durch die, für IT-Verhältnisse recht lange, Lebenszeit ist die Verbreitung von Programmen, die von PHP 5 abhängig sind, sehr groß. Der Grund, warum man gleich von der Version 5 auf die Version 7 springen musste, ist eine Geschichte für sich, die durchaus auch eine Suche in den Suchmaschinen wert ist.
PHP 7 wieso?
Eine neue Version ist in der IT durchaus etwas positives, kann aber auch viele, viele Probleme mit sich ziehen und Anwender und Entwickler zur Verzweiflung bringen. Wichtigste Frage ist natürlich auch hier: Wenn meine Webseite gerade läuft mit PHP 5, wozu sollte ich dann eine neue Version nutzen und mich all den Risiken stellen? Dazu hier vier wesentliche Gründe:
Mein Hosting Provider lässt mir keine Wahl mehrEinige Provider gestalten den Umstieg fast zwangsweise. Insbesondere aus Sicherheitsgründen möchten sie keine veralteten Programme mehr anbieten. Oft kommt es auch dazu, dass die Nutzer vor vollendete Tatsachen gestellt werden: PHP 7 wird erstmal installiert und eingestellt für alle. Wenn die Nutzer trotzdem noch PHP 5 wollen, können sie ja wieder die Einstellung zurück setzen. Ein Beispiel für hohen Druck Richtung Umstellung ist das Webhosting bei 1&1: Hier gibt es ein Paket “1&1 PHP Extended Support”, welches zwar das weitere Betreiben bestimmter alter PHP-Versionen ermöglicht, aber zusätzlich kostenpflichtig macht. Ein anderes Beispiel ist der Anbieter HostEurope. Dort heißt es in der Hilfe: “Von Zeit zu Zeit werden wir alte PHP Versionen aus dem KIS entfernen und durch aktuellere ersetzen.”. Früher oder später wird hier, wie bei vielen anderen Anbietern auch, die letzte PHP 5 Version verschwinden. Updates und aktiver Support für PHP 5 werden eingestellt
Die Updates und der aktive Support für die letzte PHP 5 Version, PHP 5.6, sind bereits eingestellt. Noch bis Ende 2018 läuft die Security-Support-Phase, die nur noch sicherheitskritische Aktualisierungen ermöglicht. Manche Webseiten nutzen eventuell sogar noch ältere Versionen von PHP 5. Für alle Versionen vor PHP 5.6 gibt es aber schon länger keine Aufpasser mehr. Damit hat man an sich schon ein schwerwiegendes Sicherheitsproblem. Wenn dann noch ein Webshop läuft oder persönliche Daten im Spiel sind wird es ernst. Vorhandene und neue Programme werden für PHP 7 (weiter)entwickelt
Für Webseiten kommen verschiedenste Programme zum Einsatz: Content-Management-Systeme, Shop-Systeme, Entwicklungsframeworks und jeweils dazugehörige Plugins, die Newsletter versenden, Formulare sicher machen, Sicherheit überwachen usw. Alle Programme, die einer Weiterentwicklung unterliegen, werden bereits seit geraumer Zeit PHP-7-tauglich gemacht. Einige davon setzen mittlerweile zwingend PHP 7 voraus. Als Beispiel sei hier Typo3 in der Version 8 genannt. Andere Programme werden sicherlich auch bald neue Eigenschaften von PHP 7 in der Entwicklung nutzen und somit die Verwendung der aktuellen Version erforderlich machen. Schließlich ermöglicht PHP 7 auch einige neue Möglichkeiten und Funktionen, die sich die Entwickler zu Nutze machen wollen. Am wichtigsten: PHP 7 ist unglaublich viel schneller als sein Vorgänger
Seit der Veröffentlichung 2015 wurden bereits zahlreiche Tests durchgeführt. Alle kommen zu dem Ergebnis, dass die selben Skripte mit PHP 7 oft doppelt so schnell arbeiten wie mit den älteren Versionen. Das bedeutet für alle Besucher einer Seite, dass sie viel schneller den Inhalt der Seite zu Gesicht bekommen, weniger warten müssen und auch viele komplexe Skripte nicht mehr so häufig in Timeout-Begrenzungen laufen. Geschwindigkeit ist im Internes das A&O. Wer länger als 10 Sekunden auf eine ladende Seite wartet ist schnell geneigt zu einer anderen Seite zu wechseln.
PHP 7 wie?
Wie bereits gesagt: in den meisten Fällen ist es erforderlich, mit dem Entwickler seines Vertrauens Kontakt aufzunehmen und sie oder ihn
zu bitten, sich das Ganze mal anzuschauen und eine Aussage zu Aufwand und Umfang der Anpassungen zu treffen.
Bevor das aber zwingend wird, kann jeder erstmal zwei einfache Maßnahmen ergreifen:
-
Updates installieren
Die meisten Programme, die im Internet Verwendung finden unterliegen einem Update-Zyklus. Bei manchen muss man diese Updates aber ausdrücklich anstoßen, damit sie durchgeführt werden. Es lohnt sich also, sich seine Seite einmal dahingehend anzuschauen. Verfügbare Updates sind oft durchaus auffällig.
Erforderliche Anpassungen für betreute Software einfordern
Jedes Programm hat seine Urheber. Je nachdem wie sehr diese an der weiteren Verwendung ihrer Software interessiert sind, werden sie sich auch darum bemühen, ihre Software aktuell zu halten. Manchmal wissen die kreativen Köpfe hinter den tollen Skripten aber gar nicht, wie viele Leute ihre Programme überhaupt benutzen. Daher lohnt es sich immer, Kontakt mit dem Programmierer eines verwendeten Skripts aufzunehmen, um ihm oder ihr ins Bewusstsein zu rücken, dass ihr Einsatz tatsächlich gebraucht wird. Insbesondere für bezahlte Programme sollte man hier auf einer Anpassung bestehen.
Sollten diese beiden Maßnahmen nicht zum gewünschten Ergebnis führen, dann ist ein fähiger PHP-Entwickler gefragt. Dieser muss dann
folgende Aufgaben durchführen:
Auch wenn es eigentlich selbstverständlch ist: Sicherheitskopie der eigenen Seite anlegen<
Dann sollte man identifizieren, ob die aktuellen Probleme durch das Upgrade auf PHP 7 erzeugt werden.
Der Test ist denkbar einfach: Bei den meisten Anbietern kann man vorerst weiterhin als zu verwendende PHP
Version PHP 5.6 auswählen (aber wie lange noch?). Wenn dort die Seite problemlos läuft, dann kann man davon ausgehen, dass hier ein
Kompatibilitätsproblem vorliegt. Erst dann geht es richtig los.
Logging und “Deprecation Log” aktivieren
Das deprecation log ist eine Datei, in der alle Fehler, die im Zusammenhang mit veralteten Funktionen auftreten aufgelistet werden.
Hier kann man schnell die Problemkinder finden, einschließlich der Dateien, in denen sie verwendet wurden. Häufig werden
solche deprecated-Meldungen auch in der Datei für das normale Logging eingetragen. Das hängt stark vom verwendeten System ab.
Oft kann man die Logs auch bei seinem Provider über deren Kundenbereich einsehen und muss nicht erst die eigentliche Datei mit
einem FTP-Client suchen.Das deprecated-logging muss aber oft auch erst aktiviert werden. Die Deaktivierung wird oft vorgenommen,
um die Logs nicht zu überfüllen. Auch die Art der Aktivierung hängt stark vom System ab. Bei WordPress zum Beispiel muss erst einmal
das Logging aktiviert werden. Das wird in der Datei wp-config.php durchgeführt.
Dort sind folgende Zeilen hinzuzufügen bzw. anzupassen:define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );Mit diesen drei Zeilen wird bewirkt, dass eine Datei unter wp-content/debug.log angelegt
wird, in die alle Meldungen eingetragen werden, einschließlich der kleineren und größeren Fehler und Hinweise über veraltete Funktionen.
Außerdem wird die Fehleranzeige auf dem Bildschirm selbst unterdrückt. Für die Nutzer einer Seite sind deren Fehler meistens uninteressant
oder unerwünscht in der Anzeige. Mittels der Konstante WP_DEBUG würden diese aber alle angezeigt werden. Sollen sie aber nicht, deswegen
werden sie in das Log umgeleitet.
Nach veralteten und entfernten Funktionen suchen und diese ersetzen
Im eingeschalteten Log sind dann die Hinweise zu den Problemen vorhanden. Am dringlichsten sind jene,
die einen “FATAL ERROR” verursachen, denn diese Fehler verhindern vollständig das weitere Anzeigen einer
Seite und führen oft zur Anzeige einer leeren weißen Seite. Für die gefundenen Probleme
gibt die Seite php.net Hinweise auf die Alternativen oder Anpassungen.
Das mit Abstand häufigste Problem, welches ich selbst bei der Anpassung von Seiten für PHP 7 gefunden habe, ist die Abschaffung der
Extension mysql. Diese Extension ist für die Verbindung mit bestimmten Datenbanken zuständig. Sie wurde aber bereits seit PHP 5.5 als
veraltet gekennzeichnet. Das bedeutet schon seit dem Jahr 2013. Bei PHP 7 wurde die mysql-Extension vollständig entfernt. Leider war mysql
eine sehr oft genutzte Standardfunktion für die Verbindung zu einer MySQL Datenbak, sie war einfach zu handhaben und schnell programmiert.
Eine Datenbankverbindung ist immer noch auf praktisch jeder dynamischen Seite üblich. Für PHP 7 muss man mysql aber durch eine Alternative
ersetzen. php.net schlägt hier die Extensions mysqli oder PDO vor. Das sind andere Varianten der Datenbankverbindung und -abstraktion. Moderner,
aber anders. Das Ersetzen ist meist kein großer Aufwand. Betreffende Datei öffnen, Codezeilen und Strukturen ersetzen. Oft kann man so
innerhalb einer Stunde die Kompatibilität mit PHP 7 wieder herstellen.
Geänderte Funktionen prüfen
Zusätzlich zu den entfernten Funktionen wurden auch einige vorhandene Funktionen geändert. Auch für diese sollte man ein Auge haben,
deren Fehlermeldungen im Log prüfen und die Ausgaben testen. Sollte also die Behebung der FATAL ERRORS noch nicht reichen muss man hier
etwas mehr ins Detail gehen. Auch hier hilft der Migrationsleitfaden von php.net
in dem alle geänderten Funktionen aufgelistet sind.
php.ini prüfen
Sollte es dann immer noch zu Auffälligkeiten kommen, dann geht es weiter mit der Suche. Einige Direktiven für die Serverkonfiguration,
die man mittels der Datei php.ini beeinflussen kann wurden entfernt. Auch hier gibt der Migrationsleitfaden eine Übersicht, anhand derer
man die betreffende Datei prüfen und überarbeiten sollte.
PECL-Module prüfen
PECL ist eine Bibliothek für PHP-Extensions in der alle bekannten Extensions bereit gestellt werden. Leider sind einige Extensions noch
nicht PHP 7 tauglich, daher muss ggf. verwendete Extensions prüfen und bei Bedarf erstetzen, bzw. die genutzten Funktionen aus den
Extensions im Programmcode anpassen. Das kann sehr aufwändig werden. Hier lohnt sich sicher vorher die Kontaktaufnahme mit dem Programmierer der
entsprechenden PHP-Extension.
Mit der angemessenen Sorgfalt und etwas Geduld kann man so bald die Vorteile von PHP 7 nutzen.
PHP 7 go!
PHP 5 wird gehen müssen, früher oder später. Die Umstellung auf PHP 7 seitens der Webhosting-Provider ist in vollem Gange. Wenn eine Anpassung der eigenen Seite für PHP 7 erforderlich ist, dann ist fast immer Hilfe von sachkundigen Menschen mit Programmierkenntnissen erforderlich. In den einfachen Fällen ist eine Webseite innerhalb einer Stunde repariert, aber zuvor muss erstmal jemand gefunden werden der es kann. Die Menge an Entwicklern für die Umstellung ist begrenzt und die Experten sind gefragt. Also besser nicht warten bis es zu spät ist und die eigene Webseite beim Aufruf leer bleibt.
Mehr Details
Für alle die es ganz genau wissen möchten: Hier befindet sich die genaue Auflistung der Änderungen und Anpassungen von PHP 5.6 zu PHP 7.0.
Comments