PHP-Upgrade beim Provider? So bleibt eine ältere CMS(TYPO3)-Site nahtlos online
PHP-Version neu — CMS/TYPO3-Installation nicht — das simple Konstrukt aus nur zwei Dateien exportiert eine dynamische in eine statische…
PHP-Upgrade beim Provider? So bleibt eine ältere CMS(TYPO3)-Site nahtlos online
PHP-Version neu — CMS/TYPO3-Installation nicht — das simple Konstrukt aus nur zwei Dateien exportiert eine dynamische in eine statische Site — das Original bleibt dabei komplett erhalten (für spätere Updates)

Dies simple Konstrukt aus nur zwei Dateien exportiert eine dynamische in eine statische Site — BIld: AI generated
Ein ⬇️ Bild ⬇️ ️sagt mehr als tausend Worte, deswegen direkt zu Beginn, das, was eigentlich erst zu sehen sein wird, wenn alles fertig ist ➡️ auf der jeweiligen Domain.
Bei mir habe ich jetzt alles umgestellt mit genau den Skripten, die unten beschrieben werden, das klappt sogar mit NEWS und PRINT-Versionen.
Also ein sprechendes Beispiel in Form einer Timeline als Screenshot ⬇️:

Screenshot vorher-mittendrin-fertig — am Beispiel einer reellen Domain
📝 Einleitung
Diese zwei Skripte erzeugen eine statische HTML-Version einer bestehenden Website — ursprünglich entwickelt für TYPO3-Installationen, die durch ein PHP-Upgrade nicht mehr lauffähig waren.
Einschub: Ich hatte natürlich den Bot gefragt, welche Tools da am besten einzusetzen seien, wenn man dieses Ziel verfolgt. a) etwas namens httrack_x64–3.49.2… wenig vertrauenserweckende Oberfläche mit Look&Feel der 80er… und nicht (explizit) W11-tauglich b) wegt… wegt!??? Da bin ich hellhörig geworden — und extrem neugierig…
Voilà — hier das Ergebnis!
Grundsätzlich gilt dabei: Alle dynamisch generierten Inhalte, die zur Laufzeit eines Content-Management-Systems (CMS) wie TYPO3 erzeugt werden, z. B. durch Erweiterungen wie powermail (Kontaktformulare), news, login, _ttproducts oder andere auf PHP-Logik basierende Funktionen, werden in einem statischen Export nicht mehr funktionsfähig sein. Da keine serverseitige Verarbeitung mehr stattfindet, gehen alle dynamischen Interaktionen verloren. Es handelt sich ausschließlich um einen HTML-Snapshot des jeweiligen Frontend-Zustands zum Zeitpunkt des Exports.
Das Skript wurde explizit mit TYPO3 getestet, sollte jedoch prinzipiell auch mit anderen CMS-basierten Systemen funktionieren, sofern diese Seiten auslieferbar machen, die sich per wget vollständig abgreifen lassen. Ebenso ist der Einsatz bei rein statischen Websites grundsätzlich problemlos möglich – wurde in diesen Fällen jedoch nicht im Detail verifiziert.
⚠️ Der Auslöser: Erzwungenes PHP-Upgrade
Wenn der Hosting-Anbieter die Standard-PHP-Version aktualisiert, sind Kompatibilitätsprobleme mit älteren CMS-Plattformen vorprogrammiert. TYPO3-Installationen, die seit Jahren nicht aktualisiert wurden, können plötzlich nicht mehr geladen werden. Die Optionen sind begrenzt: kostenintensive Upgrades, Notfall-Patches — oder kreative Alternativen.
Simpelste Alternative
Die — danach ehedem — dynamische TYPO3-Website in eine statische HTML-Kopie umwandeln.
Und das Orignal bleibt komplett unangetastet, die ältere TYPO3-Instanz kann später problemlos lokal (oder sonstwo) über z.B. Docker/DDEV angehoben werden — wenn dann mal Zeit dafür ist.
🎯 Statischer Export mit sauberem HTML
Ziel war es, eine TYPO3-basierte Website zu bewahren, indem eine statische Kopie erzeugt wird — mit sauberen Dateinamen und funktionierenden Links. Das Ergebnis ist ein interaktives Bash-Skript, das:
- den Nutzer durch den Exportprozess führt,
- die Live-TYPO3-Seite mittels
wgetherunterlädt, - Dateinamen mit Query-Strings bereinigt (
?id=...), - defekte oder codierte Links in HTML-Dateien korrigiert und
- alles in einem benutzerdefinierten Ordner unter
static-copy/ablegt.
Kein PHP. Kein TYPO3 im Hintergrund. Reines HTML.
💡 Unschlagbarer Vorteil
1️⃣ Die Seite bleibt — im aktuellen Stand — weiterhin im Internet erreichbar. 2️⃣ Man kann problemlos lokal mit der CMS-/PHP-Variante arbeiten, z. B. via Docker oder DDEV — dafür:
- 🔧 Symlink zur
index.phplöschen - 📝 Neue Zeilen in der
.htaccessauskommentieren
🔄 Schritt für Schritt: Von der URL zur statischen Website
1. 🛠️ Umgebung vorbereiten
SSH-Zugang ist erforderlich. Sowohl run_all.sh als auch nachbearbeiten.sh müssen ins Webroot der TYPO3-Installation hochgeladen werden (htdocs/). Nur so stimmen interne Verlinkungen und Pfadstrukturen.
2. 💻 Interaktive Eingabe
Beim Start fragt run_all.sh interaktiv nach:
- der Start-URL (z. B.
[https://example.org)](https://example.org)) - einem individuellen Ordnernamen für den Export (
static-copy/dein-ordner)
Das Skript prüft die URL auf Gültigkeit und erlaubt ggf. Wiederholung oder Abbruch. Existiert der Exportordner bereits, wird ein neuer Name vorgeschlagen — wiederholte Exporte sind dadurch sicher und nachvollziehbar.
3. 📥 Website exportieren
Die Spiegelung erfolgt per wget im rekursiven Modus.
Dabei werden HTML, CSS, JS, Bilder und Abhängigkeiten unter static-copy/dein-ordner abgelegt.
4. 🔨 Nachbearbeitung
Im Anschluss wird nachbearbeiten.sh automatisch im Zielordner ausgeführt. Das Skript:
-
benennt um:
-
index.php?id=foo.html→foo.html-style.css?abc.css→style.css -
ersetzt interne Links in
.html-Dateien: -
entfernt
index.php%3Fid=- korrigiert.css%3F...und.js%3F...-Referenzen
Das Ergebnis: eine saubere, navigierbare Kopie, die offline oder auf jedem statischen Webhost funktioniert.
5. 🚀 Bereit zur Veröffentlichung
Die statische Website liegt nun unter:
static-copy/dein-ordner/
Ab hier:
- sofort im Browser aufrufbar über den neuen Pfad
- oder das komplette Verzeichnis downloaden — uploadfähig auf beliebige Server
- verwendbar als statische Landingpage
Emfohlen: index.php in index.php_orig umbenennen und für index.html einen Symlink setzen!
— dazu muss natürlich die originale Startseite im neuen Ordner identifiziert werden (wie “1.html” oder “Startseite.html” bei Verwendung eines Alias’):
ln -s static-copy/dein-ordner/start.html index.html
Um die Site dann noch komplett zugreifbar zu machen, muss die .htaccess angepasst werden — hier nur ein Auszug, alle Details (auch über die zu treffenden Vorsichtsmaßnahmen) finden sich in den HowTo-Dateien!
# URL remains unchanged. Adjust 'ZZZ'.
RewriteEngine On
# Redirect only if the target directory exists
RewriteCond %{DOCUMENT_ROOT}/static-copy/ZZZ -d
# Proceed only if no matching file or directory is found in webroot
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Internally rewrite to static-copy folder
RewriteRule ^(.*)$ static-copy/ZZZ/$1 [L]
🤔 Zusammenfassend:
Die beiden Skripte (als ein Tool) eignen sich ideal zum:
- 📦 Archivieren von TYPO3-Altbeständen,
- 🔄 Umgehen akuter PHP-Kompatibilitätsprobleme,
- 🚚 Migrieren auf statisches Hosting und
- 💾 Zwischenspeichern, falls das CMS vorübergehend offline ist.
Die Ursprungsinstallation bleibt unangetastet. Es werden keine Daten verändert.
Hinweis zur Laufzeit und Stabilität
Das Skript benötigt — je nach Umfang und Komplexität der Website — unter Umständen längere Zeit. Um sicherzustellen, dass der Vorgang stabil auch über längere SSH-Sitzungen hinweg läuft, empfiehlt sich die Ausführung in einer detachten Shell-Umgebung, z. B. mit
**screen**.
screen -S meinname # Neue screen-Session starten
./run_all.sh # Skript ausführen
Ctrl+A, dann D # "Detach" – die Session läuft im Hintergrund weiter
# SSH-Verbindung kann nun beendet werden
# Später erneut verbinden:
screen -r meinname # Bestehende Session wieder aufnehmen
# Zurück zur Hauptshell:
exit # Beendet die Session, Skript wird dabei abgebrochen
# Oder:
Ctrl+A, D # Nur detach – Skript läuft weiter
📦 Skript herunterladen
Das Projekt ist auf GitHub verfügbar
und enthält:
run_all.sh: Hauptskript mit Interaktivität (_EN für Englisch, _DE für die deutsche Version!)nachbearbeiten.sh: Korrektur und Umbenennung- HowTo-Anleitungen und README.md auf GitHub für den Einstieg
❗❗❗ Das HowTo unbedingt lesen und beachten! ❗❗❗
❗ Haftungsausschluss
Dieses Skript wird ohne Gewährleistung oder Garantie bereitgestellt. Verwendung auf eigenes Risiko.
Vor dem Einsatz❗:
- ⚠️ Vollständiges Backup anlegen
- 📚 Verständnis der Funktionsweise sicherstellen
- 🧪 In Testumgebung ausprobieren
Für Datenverlust, Dateiänderungen oder unerwartetes Verhalten wird keine Haftung übernommen.
메타데이터
- post_id
- 9941c2a336c2
- slug
- php-upgrade-beim-provider-so-bleibt-eine-ältere-cms-typo3-site-nahtlos-online-9941c2a336c2
- url
- https://medium.com/rigel-computer-com/php-upgrade-beim-provider-so-bleibt-eine-%C3%A4ltere-cms-typo3-site-nahtlos-online-9941c2a336c2
- canonical_url
- https://medium.com/rigel-computer-com/php-upgrade-beim-provider-so-bleibt-eine-%C3%A4ltere-cms-typo3-site-nahtlos-online-9941c2a336c2
- author_url
- https://medium.com/@rigel-computer
- status
- ok
- fetched_at
- 2026-07-19 12:11:04