PHP 7.0 · Ohne Sicherheitsupdates seit 10.01.2019

PHP 7.0: der erste 7er, seit Januar 2019 ohne Updates. Was ein Upgrade auf PHP 8 heute bedeutet

PHP 7.0 brachte 2015 den großen Geschwindigkeitssprung und ist seit dem 10. Januar 2019 ohne Sicherheitsupdates. Anwendungen darauf haben sieben Jahre Deprecations verpasst, die sie nie als Warnung gesehen haben. Was beim Upgrade auf PHP 8.4 bricht und wie wir vorgehen.

Erschienen
03.12.2015
Aktiver Support bis
03.12.2017
Sicherheitsupdates bis
10.01.2019
Letztes Release
7.0.33
Empfohlenes Ziel
PHP 8.4

Termine: php.net, Supported Versions.

PHP 7.0 erschien im Dezember 2015 und machte Anwendungen gegenüber 5.6 ungefähr doppelt so schnell. Deshalb wurde eifrig migriert, und deshalb liegt heute viel Code auf genau dieser Version: Die Migration von 5.6 war anstrengend, und danach hat man die Version nicht mehr angefasst. Seit dem 10. Januar 2019 gibt es keine Sicherheitsupdates mehr, das letzte Release war 7.0.33.

Wo PHP 7.0 heute steht

Sieben Jahre ohne Pflege. Alle Lücken, die seit 2019 im Interpreter gefunden wurden, sind offen, auch die beiden kritischen vom 21. Oktober 2026, die das PHP-Projekt nur für 8.2 bis 8.5 geschlossen hat. Hoster bieten 7.0 fast nirgends mehr an; wer noch darauf läuft, tut es meist auf einem eigenen Server, dessen Betriebssystem ebenfalls aus der Zeit stammt. Das ist der Fall, in dem die Anwendung gehackt wird und der Server zehn Jahre alt ist.

Das besondere Risiko von 7.0 gegenüber 7.4: Der Code hat die Warnungen nie gesehen, mit denen PHP zwischen 7.2 und 7.4 die späteren Brüche angekündigt hat. Ein leeres Fehlerlog auf 7.0 sagt nichts über die Kompatibilität mit PHP 8.

Was beim Upgrade von 7.0 auf PHP 8 bricht

  • mcrypt wurde mit 7.2 aus dem Kern entfernt. Login-Routinen, Token-Verschlüsselung und Session-Handling aus der Zeit um 2016 nutzen es häufig. Ersatz ist OpenSSL oder Sodium, und die gespeicherten Daten müssen umgeschlüsselt werden.
  • each(), create_function(), __autoload() sind seit 8.0 entfernt; auf 7.0 laufen sie ohne jede Meldung. create_function() steckt gern in Sortier- und Template-Hilfsfunktionen.
  • Geschweifte Klammern für Offsets ($str{0}) sind seit 8.0 ein Syntaxfehler. Die Datei lädt dann gar nicht mehr.
  • Vergleiche zwischen Text und Zahl verhalten sich seit 8.0 anders. Prüfungen wie if ($id == "") oder in_array(0, $strings) kippen still.
  • Warnungen werden zu Fehlern. Interne Funktionen werfen seit 8.0 TypeError oder ValueError, wo 7.0 eine Warnung schrieb und weiterlief. Der Klassiker: count(null) oder strlen() auf einem Array.
  • Verschachtelte Ternär-Operatoren ohne Klammern sind seit 8.0 ein Fehler. In Templates und Hilfsfunktionen von 2016 kommen sie vor.
  • Reservierte Wörter. match ist seit 8.0 ein Schlüsselwort. Eine Funktion oder Methode namens match() lädt nicht mehr.
  • Ressourcen sind Objekte. cURL-, GD- und XML-Handles sind seit 8.0 Objekte; Prüfungen mit is_resource() schlagen fehl.
  • Dynamische Eigenschaften sind seit 8.2 veraltet, implizit nullbare Parameter (Type $x = null) seit 8.4. Beides erzeugt Hinweise, die den Weg zur nächsten Version vorbereiten.

Die vollständige Liste steht im Beitrag PHP 8 Breaking Changes, die Werkzeuge zum Aufspüren unter Deprecated-Funktionen finden.

Der Weg von 7.0 auf PHP 8.4

  1. Bestandsaufnahme auf einer Kopie. Welche Erweiterungen, welche Bibliotheken, welches Framework in welcher Version. Bei 7.0 kommt fast immer ein Framework-Upgrade dazu, etwa von Symfony 2.8 oder von einem alten Laravel.
  2. Warnungen einsammeln. Die Testsuite einmal unter PHP 7.4 laufen lassen, um die Deprecations zu sehen, die 7.0 verschweigt. Das ist ein Werkzeugschritt, kein Zwischenziel.
  3. Sicherheitsnetz. Tests um Bestellung, Abrechnung, Import, Login, bevor eine Zeile geändert wird.
  4. Rector für das Mechanische, Handarbeit für mcrypt-Ersatz, Typ-Vergleiche und tote Bibliotheken.
  5. Umschalten mit Rückweg in einer Randzeit, alte Version bleibt zwei Wochen bereit.

Für wen das nicht passt

Wenn das Framework tot ist und keinen Upgrade-Pfad hat, ist die Frage nicht mehr PHP 8, sondern Modernisierung oder Neuentwicklung. Das klären wir im Befund, nicht erst in der Migration.

Kosten

Die Pakete für den Weg von PHP 7.0 auf PHP 8.4

Ab-Preise netto. Verbindlich wird es mit dem Festpreis nach dem Befund, und der Befund wird auf jedes Folgepaket angerechnet.

PaketPreisDauerFür wen
BefundAnalyse Preisab 2.980 € Dauer2–3 Werktage Sie brauchen eine belastbare Grundlage für eine Entscheidung oder ein Budget – keine Schätzung aus dem Bauch.
Minimal-MigrationUmsetzung · das Nötigste Preisab 9.800 € Dauer2–6 Wochen Ihr Hoster schaltet PHP 7 ab, ein Audit verlangt eine unterstützte Version – und Sie brauchen das schnell, nicht schön.
Werkstatt-BereitschaftLaufend · Wartung & Notfall Preisab 980 €/Monat Dauerlaufend Sie haben niemanden im Haus, der das System betreut – oder wollen nach der Modernisierung nicht wieder zurückfallen.

Fragen

Was zu PHP 7.0 meistens gefragt wird

Mein Code läuft auf 7.0 ohne Fehler im Log. Warum sollte er auf PHP 8 brechen?

Weil die Warnungen, die auf die Brüche hinweisen, erst in PHP 7.2, 7.3 und 7.4 eingeführt wurden. Eine Anwendung auf 7.0 hat sie nie gesehen. each(), create_function(), mcrypt, geschweifte Klammern für Zeichenketten-Offsets: Alles still in 7.0, alles weg in 8.0. Das stille Log ist kein Hinweis auf Kompatibilität, nur auf das Alter der Version.

Lohnt sich ein Zwischenschritt auf PHP 7.4, um die Deprecation-Warnungen zu sehen?

Als Werkzeug ja, als Projektziel nein. Wir lassen die Testsuite einmal unter 7.4 laufen, um die Warnungen einzusammeln, und gehen dann direkt auf 8.4. Ein produktiver Zwischenstand auf 7.4 wäre ein zweites Deployment-Projekt für eine Version, die selbst seit 2022 ohne Updates ist.

Welche Frameworks liefen typischerweise auf 7.0?

Symfony 2.8 und 3.x, Laravel 5.1 bis 5.4, CakePHP 3, erste Shopware-5-Installationen, TYPO3 7 und 8. Alle diese Framework-Versionen sind ebenfalls lange ohne Support. Das Framework-Upgrade ist deshalb meist Teil des Projekts, nicht ein getrenntes.

Nächster Schritt: Befund (ab 2.980 €)

Drei kurze Schritte im Formular, dann melden wir uns innerhalb eines Werktags. Wer noch nicht so weit ist, nimmt den kostenlosen Kurz-Check.

Befund anfragen