# PHP unter Windows aktualisieren

> PHP unter Windows updaten: richtige Variante wählen, Download per SHA-256 prüfen, php.ini übernehmen und Apache-Modulbetrieb gegen PHP2Shell beachten.

Quelle: https://phpsos.de/blog/php-unter-windows-aktualisieren/  
Stand: 25.10.2026  
Anbieter: PHP SOS, PHP-Notfallhilfe und Server-Sicherheit. Soforthilfe per WhatsApp: https://wa.me/491736494914?text=Hallo%20PHP%20SOS%2C%20wir%20brauchen%20Hilfe%20mit%20unserem%20PHP-Server.%20Firma%3A%20%E2%80%A6%20Website%3A%20%E2%80%A6

**Kurz gesagt:** Unter Windows aktualisieren Sie PHP von Hand: behobene Version von php.net laden, dieselbe Variante (Thread Safe oder Non Thread Safe) und Architektur wählen, den Download per SHA-256 prüfen, php.ini und Erweiterungen übernehmen, den Pfad umstellen und alle PHP-Prozesse neu starten. Besonders dringend ist das Update, wenn Apache unter Windows PHP als Modul lädt, denn diese Betriebsart stuft das PHP-Team bei PHP2Shell am höchsten ein.

## Wo PHP auf Windows-Rechnern überall steckt

Windows-Server mit PHP gibt es häufiger, als viele denken. Selten ist es die große Website, oft sind es Intranets, Fachanwendungen oder Werkzeuge, die vor Jahren jemand eingerichtet hat. Der Betrieb unter IIS ist auf der Seite [PHP unter Windows und IIS absichern](https://phpsos.de/server/windows-iis-php/) ausführlich beschrieben. Dieser Beitrag behandelt das Update selbst und die Fälle jenseits von IIS.

Typische Fundorte sind Apache für Windows mit PHP als Modul, Entwicklerpakete wie XAMPP, WampServer oder Laragon, die auf einem Server gelandet sind, eigene PHP-Kopien in Fachanwendungen und PHP-Skripte in geplanten Aufgaben. Die folgenden PowerShell-Befehle lesen nur und helfen beim Finden:

```powershell
# Alle php.exe auf Laufwerk C: finden (dauert auf großen Laufwerken etwas)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Welche php.exe liegt im Suchpfad?
where.exe php

# Laufende PHP- und Apache-Prozesse mit Pfad und Startzeit
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Version und geladene Konfiguration einer Installation (Pfad als Beispiel)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Wichtig: Läuft PHP als Apache-Modul, gibt es keinen eigenen PHP-Prozess. PHP steckt dann im Prozess `httpd.exe`. Wer nur nach php-cgi-Prozessen sucht, übersieht diese Installationen.

Leicht vergessen werden auch geplante Aufgaben, die PHP-Skripte aufrufen, etwa für Importe, Berichte oder Datenabgleiche. Sie nutzen oft eine eigene, ältere `php.exe`. Für PHP2Shell gelten sie als weniger gefährdet, weil die Kommandozeile nach den bisherigen Angaben von php.net nicht zu den betroffenen Betriebsarten zählt; beim Austausch müssen sie trotzdem auf den neuen Pfad zeigen, sonst bleibt die alte Installation in Gebrauch und wird nie entfernt.

```powershell
# Geplante Aufgaben, die PHP aufrufen
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Ein eigenes Thema sind Entwicklerrechner. XAMPP und ähnliche Pakete starten Apache mit PHP als Modul und sind oft im ganzen Firmennetz erreichbar. Auch dort gehört das PHP aktualisiert, und der Webserver sollte nur auf dem eigenen Rechner lauschen.

## Thread Safe oder Non Thread Safe: die richtige Variante

php.net bietet jede Windows-Version in mehreren Varianten an. Für den Austausch gilt: dieselbe Variante und Architektur wie bisher, sonst laden Webserver oder Erweiterungen nicht.

| Merkmal | Optionen | Wann welche |
|---|---|---|
| Thread-Sicherheit | NTS (Non Thread Safe), TS (Thread Safe) | laut php.net NTS für FastCGI, etwa IIS, und Kommandozeile; TS für PHP als Modul in Apache |
| Architektur | x64, x86 | php.net empfiehlt x64 |
| Compiler | VS16, VS17 | benötigt die Visual C++ Redistributable für Visual Studio 2015 bis 2022 |

Für PHP 8.5 listete php.net beim Abruf am 25.10.2026 die Version 8.5.12 vom 21.10.2026, als ZIP-Archiv in allen vier Kombinationen. Die übrigen unterstützten Zweige wählen Sie auf derselben Seite aus. Behoben sind 8.5.12, 8.4.27, 8.3.36 und 8.2.35. Für 8.1 und älter gibt es keine offiziellen Updates mehr.

## PHP-Update unter Windows: Download prüfen und sauber austauschen

1. **Behobene Version laden:** von der Windows-Downloadseite auf php.net, passend zu Variante und Architektur.
2. **Prüfsumme vergleichen:** php.net nennt zu jedem Archiv einen SHA-256-Wert. Weicht er ab, verwenden Sie die Datei nicht.
3. **In neuen Ordner entpacken:** etwa `C:\PHP\8.4.27`, damit der alte Stand als Rückweg erhalten bleibt.
4. **Konfiguration übernehmen:** die bisherige `php.ini` kopieren und mit der neuen `php.ini-production` vergleichen.
5. **Erweiterungen prüfen:** Zusätzliche DLL-Dateien von Drittanbietern müssen zu Version, Variante und Architektur passen.
6. **Pfad umstellen:** im FastCGI-Eintrag, in der `LoadModule`-Zeile von Apache oder in der Umgebungsvariable `PATH`.
7. **Neu starten und prüfen:** Webserver-Dienst und geplante Aufgaben neu starten, dann Version und Startzeiten kontrollieren.

```powershell
# SHA-256 der heruntergeladenen Datei berechnen und mit php.net vergleichen
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Nach dem Wechsel: geladene Erweiterungen und Version der neuen Installation
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Startet PHP nach dem Wechsel nicht oder meldet eine fehlende DLL, fehlt häufig die Visual C++ Redistributable in passender Architektur, oder eine Erweiterung passt nicht zur neuen Version. Der Fehler zeigt sich am schnellsten, wenn Sie `php.exe -v` direkt in der Kommandozeile aufrufen, bevor Sie den Webserver umstellen. Was die einzelnen Einträge der php.ini bewirken, erklärt [Die php.ini erklärt](https://phpsos.de/php/php-ini-erklaert/).

## Apache unter Windows: Modulbetrieb ernst nehmen

Viele ältere Windows-Installationen binden PHP über eine `LoadModule`-Zeile direkt in Apache ein. Das ist technisch dasselbe wie mod_php unter Linux. Das PHP-Team stuft das Risiko von PHP2Shell genau dort am höchsten ein, weil ein Exploit gezeigt wurde, bevor überhaupt Anwendungscode läuft. Hintergründe stehen unter [Warum mod_php besonders gefährdet ist](https://phpsos.de/php2shell/mod-php-risiko/).

Welche Module ein Apache lädt, zeigt `httpd.exe -M` im bin-Ordner der Installation; der Befehl liest nur. Steht dort ein PHP-Modul, hat das Update Vorrang. Mittelfristig lohnt der Wechsel auf PHP über FastCGI mit NTS-Build, damit PHP in eigenen Prozessen läuft. Das verlangt einen Test, weil sich Konfiguration und Rechte ändern.

> **Wichtig:**
> Der Austausch der Dateien schließt die Lücke noch nicht. Solange der Apache-Dienst, IIS-Anwendungspools oder geplante Aufgaben mit der alten Version laufen, bleibt die Lücke offen. Prüfen Sie die Startzeit jedes Prozesses nach dem Update.

## Nach dem Update: Kontrolle und Spuren

Halten Sie je Installation Pfad, Version, Variante und Datum des Wechsels fest. Entfernen Sie alte PHP-Ordner erst, wenn der neue Stand stabil läuft, und dann wirklich, damit sie nicht versehentlich wieder eingebunden werden.

Ein Update entfernt keine Schadsoftware. War ein Windows-Server in den Tagen vor dem Patch aus dem Internet erreichbar, prüfen Sie Web-Verzeichnisse auf neue Skriptdateien, geplante Aufgaben und lokale Konten auf Unbekanntes und sichern Sie die Webserver-Protokolle ab dem 20. Oktober. Woran Sie einen Einbruch erkennen, beschreibt [Bin ich schon kompromittiert?](https://phpsos.de/php2shell/bin-ich-gehackt-anzeichen/).

## Wie hilft PHP SOS konkret?

- **Alle Installationen finden:** Wir suchen PHP auf Ihren Windows-Systemen, auch in Apache-Modulen, Entwicklerpaketen und Fachanwendungen.
- **Austauschen und belegen:** Über den [PHP-Patch-Service](https://phpsos.de/leistungen/php-patch-service/) wechseln wir auf die behobene Version, prüfen Prüfsummen und dokumentieren Version und Prozessstart.
- **Betriebsart verbessern:** Wo PHP als Apache-Modul läuft, planen und testen wir den Umstieg auf FastCGI.
- **Spuren prüfen:** Wir sichern Protokolle und prüfen die Systeme auf Hinweise eines Angriffs.


## Häufige Fragen

**Aktualisiert Windows Update auch PHP?**  
Nein. PHP gehört nicht zu Windows. Es kommt als ZIP-Archiv von php.net, als Teil eines Pakets wie XAMPP oder mit einer Fachanwendung und muss jeweils auf diesem Weg aktualisiert werden.

**Brauche ich die Thread-Safe- oder die Non-Thread-Safe-Version?**  
Laut php.net ist NTS für FastCGI, also etwa für IIS, und für die Kommandozeile gedacht. TS ist für den Betrieb als Modul im Webserver gedacht, etwa in Apache. Nehmen Sie beim Update dieselbe Variante wie bisher.

**Wie prüfe ich, ob der PHP-Download echt ist?**  
php.net nennt zu jedem Windows-Archiv eine SHA-256-Prüfsumme. Mit Get-FileHash in PowerShell berechnen Sie die Prüfsumme der heruntergeladenen Datei und vergleichen beide Werte Zeichen für Zeichen.

**Ich nutze XAMPP auf einem Server. Was jetzt?**  
Pakete wie XAMPP bringen ihr eigenes PHP und Apache mit, oft mit PHP als Apache-Modul. Prüfen Sie, ob das Projekt eine Version mit behobenem PHP anbietet, und stellen Sie die Installation sonst auf eine gepflegte Lösung um. Für den Produktivbetrieb sind solche Entwicklerpakete ohnehin nicht gedacht.

## Quellen

- [php.net: PHP für Windows herunterladen](https://www.php.net/downloads.php?os=windows)
- [PHP: Unterstützte Versionen](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: Dokumentation](https://httpd.apache.org/docs/)
