Alle Leistungen

PHP-Upgrade & Migration

Vom alten PHP auf PHP 8. Im laufenden Betrieb, mit Rückweg je Schritt.

Läuft Ihr System auf PHP 5.6, 7 oder einem frühen 8, läuft es ohne Sicherheitsupdates. Gescheut wird das Upgrade trotzdem, weil niemand sagen kann, was es auslöst: Abhängigkeiten ohne Nachfolger, Code ohne Tests, und die Leute, die ihn geschrieben haben, sind weg. Ich mache daraus ein Vorhaben mit Reihenfolge, Rückweg und Termin, während das System weiterläuft.

PHP 5.6 → 8.4Rector & PHPStanohne AusfallEinstieg ab 1.250 €
Was Sie bekommen
  • Kompatibilitätsbefund: was bricht, wo, mit welchem Aufwand
  • Reihenfolge in Schritten, die einzeln produktiv gehen
  • Testnetz um die Stellen, die angefasst werden
  • Upgrade im laufenden Betrieb, mit Rückweg je Schritt
  • Abhängigkeiten auf gepflegte Stände, Aufgegebenes ersetzt
  • Übergabe an Ihr Team, schriftlich und im Gespräch
Umfang & Zusammenarbeit

Einstieg als Befund zum Festpreis, Umsetzung nach Umfang. Auch für Systeme ohne Dokumentation und ohne die Leute, die sie gebaut haben.

Remote aus Deutschland. Direkt mit mir, ohne Agentur dazwischen.

Die Ausgangslage

Das Upgrade ist nicht das Problem.

Die Sprachänderungen von PHP 7 auf 8 sind überschaubar und gut dokumentiert. Was Vorhaben scheitern lässt, steht daneben: eine Bibliothek, deren letzter Commit sieben Jahre alt ist. Ein Framework, das drei Hauptversionen zurückliegt. Eine Erweiterung, die es für PHP 8 nie gab. Und ein Datenbanktreiber, der stillschweigend anders vergleicht als vorher.

Kommt Ihr System aus PHP 5, ist die Lage eine andere, und ich sage das offen: Der Bruch liegt dort nicht zwischen 7 und 8, sondern zwischen 5 und 7. Die alten Datenbankfunktionen sind ersatzlos entfernt, aus Fehlern wurden Ausnahmen, und Konstruktionen wie each() oder create_function() gibt es nicht mehr. Solche Vorhaben laufen deshalb in zwei Etappen über eine Zwischenversion, nicht in einem Sprung – jede Etappe für sich produktiv, jede für sich zurückdrehbar.

Dazu kommt die Lage, in der die meisten Anfragen entstehen: Der Code läuft, verdient Geld, und die Menschen, die ihn geschrieben haben, sind nicht mehr da. Es gibt keine Tests, keine Dokumentation und niemanden, der sagen kann, warum an einer Stelle gerundet wird. Ein Upgrade ist dann kein Wartungsvorgang, sondern eine Wette darauf, dass man alles gefunden hat.

Genau deshalb fängt die Arbeit nicht im Code an, sondern mit einem Befund: Was bricht, was bricht nur vielleicht, und was davon berührt Geld. Erst danach lässt sich sagen, ob das Vorhaben zwei Wochen dauert oder drei Monate.

Kommt Ihnen etwas davon bekannt vor?
  • Das System läuft auf PHP 5.6, 7.4 oder 8.1 und bekommt keine Sicherheitsupdates mehr.
  • Ein Dienstleister hat das Upgrade angeboten und dann den Aufwand nicht mehr genannt.
  • Der Hoster kündigt die alte PHP-Version, und niemand weiß, was dann passiert.
  • Es gibt keine Tests, also weiß niemand, ob nach dem Upgrade noch alles stimmt.
  • Composer meldet Konflikte, sobald man eine einzige Version anhebt.
  • Ein Audit oder ein Kunde verlangt eine unterstützte Laufzeitumgebung.

Für wen das passt

Für Verantwortliche, deren PHP-Anwendung weiterlaufen muss, während ihre Laufzeit ausläuft.

Das Angebot richtet sich an CTOs und technische Leiter mit einer produktiven PHP-Anwendung auf einer alten oder nicht mehr unterstützten Version. Security, Hosting oder neue Bibliotheken machen weiteres Abwarten zum Risiko.

01

Die Anwendung wird weiterhin gebraucht.

Das System trägt Umsatz oder Kernprozesse und soll in den nächsten Jahren verlässlich weiterentwickelt werden.

02

Ein Big Bang ist zu riskant.

Abhängigkeiten, Testlücken und unbekannte Seiteneffekte verlangen kleine Schritte mit messbarem Rückweg.

03

Der Betrieb darf nicht stillstehen.

Das Upgrade muss neben laufenden Releases stattfinden und so übergeben werden, dass das bestehende Team danach weiterarbeiten kann.

Was ich mache

Was dabei passiert

01

Kompatibilitätsbefund statt Bauchgefühl

PHPStanRector (dry-run)Composer why-not

Statische Analyse über den gesamten Bestand, getrennt nach echten Brüchen, geänderter Semantik und aufgegebenen Funktionen. Dazu die Abhängigkeiten: Welche Pakete gibt es für die Zielversion, welche sind aufgegeben, welche brauchen einen Ersatz. Ergebnis ist eine Liste mit Fundstelle, Schwere und geschätztem Aufwand.

02

Sicherheitsnetz vor dem ersten Eingriff

PHPUnitCharacterization TestsGolden Master

Wo keine Tests existieren, entstehen zuerst Characterization Tests: Sie halten fest, was das System heute tut, unabhängig davon, ob es richtig ist. Das Netz muss nicht vollständig sein, es muss die Stellen abdecken, die angefasst werden, und die Wege, an denen Geld hängt.

03

Automatisiert umschreiben, wo es sicher geht

RectorPHP-CS-Fixerkleine Commits

Rector erledigt den mechanischen Teil: Typangaben, veraltete Aufrufe, geänderte Signaturen. Regelsatz je Zielversion, in kleinen Durchläufen, jeder als eigener Commit und einzeln überprüfbar. Jeder Lauf wird zuerst als Vorschau erzeugt und durchgesehen, denn das Werkzeug meldet nicht, wo es unsicher war: Es ändert, worauf eine Regel passt, und lässt alles andere stehen. Was danach offen bleibt, kommt von Hand auf die Liste.

04

Abhängigkeiten und Framework

ComposerSymfonyLaravelErsatz für Aufgegebenes

Der größere Teil des Aufwands steckt selten in der Sprache, sondern in Composer. Pakete kommen auf gepflegte Stände, Aufgegebenes wird ersetzt, und wo ein Framework mehrere Hauptversionen zurückliegt, wird der Sprung in eigene Schritte zerlegt. Ein Symfony- oder Laravel-Upgrade läuft nicht nebenbei mit.

05

Schrittweise in Produktion

anteiliger RolloutCanaryRückweg je Schritt

Nicht ein Stichtag, sondern eine Folge kleiner Umstellungen, jede einzeln ausrollbar und einzeln zurückdrehbar. Wo es die Architektur zulässt, läuft die neue Version zuerst für einen Teil des Verkehrs. Was dabei auffällt, fällt bei einem Prozent auf, nicht bei hundert.

06

Danach: kein neues Altsystem

CI-PrüfungenDependabotWartungsplan

Zum Abschluss stehen die Dinge, die verhindern, dass in drei Jahren dasselbe Gespräch geführt wird: statische Analyse in der Pipeline, Abhängigkeitsprüfung als wiederkehrender Lauf, und eine Notiz, wann die jetzt gewählte Version aus der Unterstützung fällt.

Läuft Ihr PHP noch auf einer Version ohne Sicherheitsupdates?

Schicken Sie mir die Eckdaten. Sie bekommen eine Einschätzung, was das Upgrade bei Ihnen bedeutet, bevor Sie etwas beauftragen.

Ablauf

Wie das abläuft

Vier Schritte, und nach dem ersten wissen Sie, worauf Sie sich einlassen. Kein Schritt setzt voraus, dass Sie den nächsten beauftragen.

SCHRITT 01

Eckdaten und Zugang

PHP-Version, Framework, ungefähre Größe, Testabdeckung, wo es deployt wird. Ein Lesezugriff auf das Repository reicht für den Befund; produktive Zugänge braucht es erst später.

SCHRITT 02

Befund

Statische Analyse und Abhängigkeitsprüfung, Ergebnis als Liste mit Fundstellen, Schwere und Aufwand, dazu eine Reihenfolge. Damit können Sie entscheiden, auch gegen mich.

SCHRITT 03

Absichern und umschreiben

Testnetz an den Stellen, die angefasst werden. Danach die automatisierten Durchläufe, dann die Handarbeit. Jeder Schritt ein Commit, jeder Commit einzeln nachvollziehbar.

SCHRITT 04

Ausrollen und übergeben

Schrittweise in Produktion, mit Rückweg. Zum Schluss Prüfungen in der Pipeline und eine Übergabe, damit Ihr Team ab dann selbst weitermacht.

Einstieg

PHP-Upgrade. Ab 1.250 €

Startpreis für den Befund. Die Umsetzung wird nach Umfang angeboten, zum Festpreis, bevor sie beginnt.

Der Einstieg ist ein Befund, keine Umsetzung: Sie erfahren, was ein Upgrade bei Ihnen bedeutet, bevor Sie darüber entscheiden müssen.

Was Sie bekommen

  • Statische Analyse über den gesamten Bestand, gegen die Zielversion
  • Abhängigkeitsprüfung: was gibt es, was ist aufgegeben, was braucht Ersatz
  • Liste der Brüche mit Fundstelle, Schwere und geschätztem Aufwand
  • Reihenfolge in Schritten, die einzeln produktiv gehen können
  • Einschätzung zu Testabdeckung und nötigem Sicherheitsnetz
  • Eine Stunde Besprechung der Ergebnisse, Aufzeichnung auf Wunsch

Was Sie nicht bekommen

  • Keine Umsetzung des Upgrades, kein Refactoring, keine neuen Funktionen
  • Keine Framework-Migration, die wird eigenständig angeboten
  • Keine Prüfung der Infrastruktur, dafür gibt es die AWS-Kostenanalyse
  • Keine Sicherheitsprüfung im Sinne eines Penetrationstests
  • Lesezugriff auf das Repository genügt, produktive Zugänge sind nicht nötig
  • Preis netto, zuzüglich Umsatzsteuer
  • Ab etwa 200.000 Zeilen oder mehreren Anwendungen wird der Umfang vorher abgestimmt
  • Der Betrag wird angerechnet, wenn Sie die Umsetzung anschließend beauftragen
  • Sie sind zu nichts verpflichtet. Manche Kunden setzen den Befund selbst um, und das ist ein gültiges Ergebnis

Das Ergebnis

Was danach anders ist

Wieder in der Unterstützung

Sicherheitsupdates kommen wieder, und die Frage im nächsten Audit ist beantwortet, ohne dass jemand eine Ausnahme begründen muss.

Änderbar statt eingefroren

Aktuelle Abhängigkeiten heißt: Ein neues Paket lässt sich installieren, ohne dass drei andere blockieren. Das war vorher der eigentliche Stillstand.

Ein Netz, das bleibt

Die Tests, die für das Upgrade entstanden sind, gehören danach Ihnen. Sie sichern die nächste Änderung genauso ab wie diese.

Messbar statt geschätzt

Ob und wie viel schneller Ihre Anwendung auf PHP 8 läuft, hängt an ihr, nicht an der Sprache. Deshalb wird vorher und nachher an denselben Wegen gemessen, und die Zahl steht im Abschlussbericht.

Eingesetzte Technologien

Womit ich arbeite

Sprache
  • PHP 8.2
  • PHP 8.3
  • PHP 8.4
  • PHP 8.5
Frameworks
  • Symfony
  • Laravel
  • Laminas
  • Slim
Analyse
  • PHPStan
  • Psalm
  • Rector
  • PHP-CS-Fixer
Tests
  • PHPUnit
  • Pest
  • Xdebug
  • Characterization Tests
Pakete
  • Composer
  • Packagist
  • Composer Audit
  • Dependabot
Daten
  • MySQL
  • MariaDB
  • PostgreSQL
  • Doctrine
  • PDO
Laufzeit
  • Docker
  • PHP-FPM
  • Nginx
  • OPcache
  • Valkey / Redis
Ausrollen
  • GitHub Actions
  • GitLab CI
  • AWS
  • Blue/Green

Nachweis

PHP und Zend Framework zertifiziert.

Die meisten Anbieter kennen das Ziel. Bei einem alten System entscheidet aber, ob jemand auch die Ausgangslage kennt: warum eine Stelle so geschrieben ist, wie sie geschrieben ist, und was ihre Ablösung anrichtet. Zend Technologies gibt es unter dem Namen nicht mehr, die Prüfungen von damals also auch nicht. Für die Datenbankseite kommt eine Oracle-Zertifizierung auf MySQL 5 dazu, denn dort liegen die stilleren Fallen: Zeichensätze, Sortierregeln und ein Strict Mode, der bisher Geduldetes ablehnt.

Zertifikat: Tim Rutte, Zend Certified Engineer PHP 5.3, ausgestellt von Zend Technologies
Zend Certified Engineer – PHP 5.3
Zertifikat: Tim Rutte, Zend Certified Engineer Zend Framework, ausgestellt von Zend Technologies
Zend Certified Engineer – Zend Framework
Tim Rutte, Cloud & Software Architect

Mit wem Sie es zu tun haben

Direkt mit mir als Freelancer. Keine Agentur dazwischen.

Ich bin Tim Rutte. Über 20 Jahre Softwareentwicklung, davon der größte Teil in PHP, von 5.x bis heute. Sie sprechen mit der Person, die Ihren Code anfasst, vom ersten Gespräch bis zur Übergabe.

  • 20+Jahre Softwareentwicklung
  • 50+erfolgreiche Projekte
  • 2003seit diesem Jahr remote im Einsatz
Mehr über mich

Häufige Fragen

Häufige Fragen zum PHP-Upgrade

Was kostet ein PHP-Upgrade?

Der Befund kostet ab 1.250 Euro netto und sagt Ihnen, was die Umsetzung kostet. Ohne Analyse ist jede Zahl geraten: Zwei Anwendungen mit derselben Zeilenzahl können um den Faktor zehn auseinanderliegen, je nachdem, ob die Abhängigkeiten gepflegt sind und ob es Tests gibt. Die Umsetzung wird nach dem Befund zum Festpreis angeboten, bevor sie beginnt.

Welche PHP-Versionen bekommen noch Sicherheitsupdates?

Stand August 2026: PHP 8.2 bis zum 31. Dezember 2026, PHP 8.3 bis Ende 2027, PHP 8.4 bis Ende 2028 und PHP 8.5 bis Ende 2029. Alles bis einschließlich 8.1 ist ohne Unterstützung, PHP 7.4 seit Ende 2022. Als Ziel empfehle ich in der Regel 8.4: eine Fassung, die lange genug draußen ist, dass die Bibliotheken nachgezogen haben, und die noch über zwei Jahre Unterstützung hat.

Wir sind noch auf PHP 5.6. Ist das zu alt?

Nein, das ist ein regelmäßiger Fall. Er ist aber ein anderes Vorhaben als ein Sprung von 7.4: Zwischen 5 und 7 liegen die härteren Brüche, die alten Datenbankfunktionen sind ersatzlos entfernt, aus Fehlern wurden Ausnahmen. Deshalb läuft der Weg über eine Zwischenversion in zwei Etappen, jede einzeln produktiv und einzeln zurückdrehbar. Ich bin Zend Certified Engineer für PHP 5.3, kenne die Ausgangswelt also nicht nur aus der Migrationsdokumentation. Was Ihr Fall bedeutet, steht nach dem Befund fest, nicht vorher.

Wir haben keine Tests. Geht das trotzdem?

Ja, das ist der Normalfall. Dann entsteht vor dem ersten Eingriff ein Netz aus Characterization Tests, das festhält, was das System heute tut. Es muss nicht vollständig sein: Es deckt die Stellen ab, die angefasst werden, und die Wege, an denen Geld hängt. Dieses Netz bleibt Ihnen danach erhalten.

Muss das System dafür angehalten werden?

Nein. Das Upgrade läuft als Folge kleiner Umstellungen, jede einzeln ausrollbar und einzeln zurückdrehbar. Bei der Redaktionsplattform aus meinen Case Studies lief die Modernisierung ohne einen Tag Ausfall, obwohl Sprache, Suche und Plattform gewechselt wurden. Entscheidend ist, dass möglichst wenig gleichzeitig in Bewegung ist: Sprachwechsel, Suche und Plattform waren dort drei getrennte Vorhaben mit eigenem Rückweg.

Was ist mit einer Bibliothek, die es für PHP 8 nicht gibt?

Das ist der häufigste harte Fall, und er hat drei Antworten: eine gepflegte Alternative mit derselben Aufgabe, eine eigene schmale Umsetzung genau dessen, was Sie tatsächlich benutzen, oder das Abtrennen des Bereichs hinter eine eigene Schnittstelle. Welche Antwort trägt, steht im Befund samt Aufwand, statt sich mitten in der Umsetzung zu zeigen.

Können Sie ein Projekt übernehmen, dessen Entwickler weg sind?

Das ist die Ausgangslage in den meisten dieser Vorhaben. Es gibt keine Dokumentation, keine Tests und niemanden mehr zu fragen. Der erste Schritt ist dann kein Umbau, sondern zu verstehen, was das System heute wirklich tut, samt der Eigenarten, die niemand geplant hat und auf die sich trotzdem jemand verlässt. Diese Bestandsaufnahme gehört ohnehin zum Befund.

Machen Sie auch das Framework-Upgrade mit?

Ja, aber als eigenes Vorhaben, nicht nebenbei. Ein Sprung über mehrere Symfony- oder Laravel-Hauptversionen ist regelmäßig größer als der Sprachwechsel selbst und braucht eine eigene Reihenfolge. Beides gleichzeitig zu machen ist der zuverlässigste Weg, hinterher nicht mehr zu wissen, woran ein Fehler lag.

Wie schnell wird die Anwendung durch PHP 8?

Messbar schneller, aber die Größenordnung hängt an Ihrer Anwendung, nicht an der Sprache. Ich nenne dazu keine Prozentzahl aus einer Broschüre. Was ich stattdessen tue: vorher und nachher an denselben Wegen messen und die Zahl in den Abschlussbericht schreiben.