PHP Legacy-Modernisierung: Migration, Refactoring und Rewrite-Strategien

Legacy-PHP-Code ist kein Urteil, sondern ein Zustand -- und Zustände lassen sich ändern. Dieser Leitfaden beschreibt, wann PHP-Anwendungen zum Risiko werden, welche Modernisierungsstrategien sich in der Praxis bewährt haben und wie der Übergang von veraltetem Code zu einer wartbaren, sicheren Architektur gelingt.
Ein Mann im Freizeit-Look steht auf einem großen Felsen und blickt über die Wolken in den Sonnenaufgang. Ein Symbolbild für PHP-Legacy-Modernisierung.
© bilanol

Wann wird PHP-Code zum Risiko?

Nicht jeder ältere PHP-Code ist automatisch problematisch. Eine Anwendung auf PHP 8.2 mit aktuellen Dependencies und solider Testabdeckung kann jahrelang stabil laufen. Das Risiko entsteht durch eine Kombination konkreter Faktoren:

End-of-Life der PHP-Laufzeitumgebung

PHP 5.6 erreichte sein End-of-Life im Dezember 2018, PHP 7.0 im Dezember 2019, PHP 7.4 im November 2022, PHP 8.0 im November 2023 und PHP 8.1 im Dezember 2025. Anwendungen auf diesen Versionen erhalten keine Sicherheitsupdates mehr. Jede bekannte Schwachstelle bleibt offen — dauerhaft. Für Unternehmen mit Compliance-Anforderungen (ISO 27001, NIS-2, DSGVO) ist der Betrieb auf einer EOL-Version ein dokumentierbarer Verstoss.

Verwaiste Frameworks

Neben der PHP-Version selbst stellt auch das verwendete Framework ein Risiko dar:

Sicherheitsimplikationen

Legacy-PHP-Code weist häufig Schwachstellen auf, die in modernen Frameworks architektonisch ausgeschlossen sind:

Eine Modernisierung ist nicht nur ein technisches, sondern auch ein Risikomanagement-Thema. Ausführlicher behandelt wird das übergreifende Thema im Leitfaden Legacy Software modernisieren aus dem Application-Management-Cluster.

Drei Wege aus der Legacy-Falle

Es gibt kein Patentrezept. Die richtige Strategie hängt von der Ausgangslage ab — Codebasis, Budget, Zeitdruck und verfügbare Kompetenz bestimmen den Weg.

Weg 1: Gezieltes Refactoring

Prinzip: Der bestehende Code wird schrittweise verbessert, ohne die Gesamtarchitektur zu ändern. Kritische Schwachstellen werden behoben, Testabdeckung aufgebaut, Abhängigkeiten aktualisiert.

Wann sinnvoll:

Typische Maßnahmen:

Aufwand: 20-40 % des Aufwands einer Neuentwicklung, verteilt über mehrere Monate.

Weg 2: Strangler Fig Pattern

Prinzip: Neue Funktionalität wird in einer modernen Architektur entwickelt und schrittweise neben das Altsystem gestellt. Über einen definierten Zeitraum übernimmt die neue Anwendung immer mehr Verantwortung, bis das Legacy-System vollständig abgelöst ist.

Wann sinnvoll:

Umsetzung in der Praxis:

Aufwand: 60-80 % einer Neuentwicklung, aber mit deutlich niedrigerem Risiko und ohne Big-Bang-Moment.

Weg 3: Kompletter Rewrite

Prinzip: Die Anwendung wird von Grund auf neu gebaut. Der alte Code dient als funktionale Spezifikation, wird aber nicht übernommen.

Wann sinnvoll:

Risiken:

Aufwand: 100 %+ einer grünen-Wiese-Entwicklung (oft mehr, weil die Migration bestehender Daten und die Parallelität beider Systeme Zusatzaufwand erzeugen).

Migration zu Laravel oder Symfony

Die Frage “Welches Ziel-Framework?” stellt sich bei jeder Migration. Beide Optionen — Laravel und Symfony — haben klare Stärken für Migrationsprojekte. Eine detaillierte Gegenüber-stellung bietet der Framework-Vergleich.

Migration zu Laravel

Gut geeignet für: Anwendungen mit klaren CRUD-Workflows, die von Laravels Conventions profitieren. Projekte, bei denen schnelle sichtbare Fortschritte wichtig sind, um Stakeholder-Vertrauen zu sichern. Teams, die mit Active-Record-ORMs (Eloquent) vertraut sind.

Migrationsstrategie: Laravel bietet mit Eloquent einen Weg, bestehende Datenbankschemas ohne Schema-Änderung zu mappen. Das ermöglicht eine schrittweise Migration: Controllers und Views werden in Laravel neu gebaut, während die bestehende Datenbank unverändertert bleibt. Erst nach vollständiger Migration der Geschäftslogik wird das Schema optimiert.

Details zur Laravel-Entwicklung.

Migration zu Symfony

Gut geeignet für: Anwendungen mit komplexen Domänenmodellen, die von Doctrine ORM und dem Data-Mapper-Pattern profitieren. Projekte mit langer geplanter Lebensdauer (10+ Jahre), bei denen Symfonys LTS-Garantien Planungssicherheit geben. Systeme in regulierten Umgebungen, bei denen architektonische Nachvollziehbarkeit für Audits relevant ist.

Migrationsstrategie: Symfonys Komponentenarchitektur erlaubt eine besonders granulare Migration. Einzelne Symfony-Komponenten (HttpFoundation, Console, DependencyInjection) können in den bestehenden Code integriert werden, noch bevor eine vollständige Framework-Migration stattfindet. Damit lässt sich die Codebasis schrittweise “symfonifizieren”.

Details zur Symfony-Entwicklung.

Datenmigration und Schnittstellenkompatibilität

Die technisch anspruchsvollste Phase jeder Legacy-Modernisierung ist nicht der neue Code — sondern die Migration bestehender Daten und die Aufrechterhaltung externer Schnittstellen.

Datenbank-Schema-Migration

Legacy-Anwendungen haben häufig organisch gewachsene Datenbankschemas: fehlende Fremdschlüssel, gemischte Datentypen, redundante Tabellen, gespeicherte Logik in Stored Procedures. Eine Schema-Migration umfasst:

API-Kompatibilität

Bestehende Anwendungen stellen häufig Schnittstellen bereit, die von Drittsystemen konsumiert werden: Mobile-Apps, Partner-Integrationen, interne Tools. Diese Schnittstellen müssen während der Migration stabil bleiben.

Bewaherte Strategie: Einen API-Kompatibilitäts-Layer zwischen altem und neuem System einziehen. Das neue System implementiert die gleichen Endpoints mit identischen Request/Response-Strukturen. Erst nach Validierung durch alle Konsumenten werden die alten Endpoints abgeschaltet. Versionierung der API (z. B. /api/v1/ vs. /api/v2/) erlaubt es, neue und alte Schnittstellen parallel zu betreiben.

Weitere Informationen zur API- und Schnittstellenentwicklung finden sich auf der entsprechenden Serviceseite.

Kosten und Zeitrahmen realistisch einschätzen

Legacy-Modernisierung scheitert selten an der Technik — sie scheitert an unrealistischen Erwartungen. Eine ehrliche Einschätzung der Kostenstruktur:

Typische Projektgrößen

StrategieCodebasis 10k LoCCodebasis 50k LoCCodebasis 100k+ LoC
Refactoring80-160 Stunden300-600 Stunden800-1.500 Stunden
Strangler Fig200-400 Stunden600-1.200 Stunden1.500-3.000 Stunden
Rewrite300-500 Stunden800-1.800 Stunden2.000-5.000+ Stunden

Diese Schätzungen umfassen Analyse, Entwicklung, Testing und Deployment. Nicht enthalten: Projektmanagement-Overhead, Stakeholder-Kommunikation und Parallelwartung des Altsystems.

ROI-Betrachtung

Die Investition in eine Modernisierung rechnet sich, wenn die laufenden Wartungskosten des Legacy-Systems die Modernisierungskosten innerhalb von 2-3 Jahren übersteigen würden. Faktoren, die den ROI positiv beeinflussen:

Versteckte Kosten bei Nicht-Modernisierung

Wer die Modernisierung aufschiebt, spart kurzfristig — zahlt aber langfristig:

Legacy-Modernisierung bei TenMedia

TenMedia begleitet seit über 14 Jahren PHP-Migrationsprojekte — von der Analyse bis zum produktiven Betrieb der modernisierten Anwendung. Die ISO-27001-Zertifizierung stellt sicher, dass auch während der Migrationsphase Informationssicherheit und Datenschutz gewährleistet bleiben.

Vorgehen

Das Inhouse-Modell (100 % eigene Entwickler, kein Freelancer-Einsatz, kein Offshoring) stellt sicher, dass Wissen über die migrierte Anwendung nicht nach Projektende verloren geht. Die Berufshaftpflicht sichert zusätzlich gegen Projektrisiken ab.

Weiterführende Informationen