# PHP onder Windows bijwerken

> PHP onder Windows updaten: de juiste variant kiezen, de download met SHA-256 controleren, php.ini overnemen en Apache-modulegebruik tegen PHP2Shell beoordelen.

Bron: https://phpsos.de/nl/blog/php-unter-windows-aktualisieren/  
Stand: 25-10-2026  
Aanbieder: PHP SOS, PHP-noodhulp en serverbeveiliging. Directe hulp via WhatsApp: https://wa.me/491736494914?text=Hallo%20PHP%20SOS%2C%20wij%20hebben%20hulp%20nodig%20met%20onze%20PHP-server.%20Bedrijf%3A%20%E2%80%A6%20Website%3A%20%E2%80%A6

**Kort gezegd:** Onder Windows werkt u PHP met de hand bij: de verholpen versie van php.net laden, dezelfde variant (Thread Safe of Non Thread Safe) en architectuur kiezen, de download met SHA-256 controleren, php.ini en extensies overnemen, het pad omzetten en alle PHP-processen herstarten. Bijzonder dringend is de update als Apache onder Windows PHP als module laadt, want die bedrijfsmodus schat het PHP-team bij PHP2Shell het hoogst in.

## Waar PHP overal op Windows-computers zit

Windows-servers met PHP komen vaker voor dan velen denken. Zelden is het de grote website, vaak zijn het intranetten, vaktoepassingen of hulpmiddelen die iemand jaren geleden heeft ingericht. De werking onder IIS is uitvoerig beschreven op de pagina [PHP onder Windows en IIS beveiligen](https://phpsos.de/nl/server/windows-iis-php/). Dit artikel behandelt de update zelf en de gevallen buiten IIS.

Typische vindplaatsen zijn Apache voor Windows met PHP als module, ontwikkelaarspakketten zoals XAMPP, WampServer of Laragon die op een server zijn beland, eigen PHP-kopieën in vaktoepassingen en PHP-scripts in geplande taken. De volgende PowerShell-opdrachten lezen alleen en helpen bij het vinden:

```powershell
# Alle php.exe op station C: vinden (duurt op grote stations even)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Welke php.exe staat in het zoekpad?
where.exe php

# Draaiende PHP- en Apache-processen met pad en starttijd
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Versie en geladen configuratie van een installatie (pad als voorbeeld)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Belangrijk: draait PHP als Apache-module, dan bestaat er geen eigen PHP-proces. PHP zit dan in het proces `httpd.exe`. Wie alleen naar php-cgi-processen zoekt, ziet deze installaties over het hoofd.

Gemakkelijk vergeten worden ook geplande taken die PHP-scripts aanroepen, bijvoorbeeld voor imports, rapporten of gegevensafstemming. Ze gebruiken vaak een eigen, oudere `php.exe`. Voor PHP2Shell gelden ze als minder gevoelig, omdat de opdrachtregel volgens de tot nu toe bekende gegevens van php.net niet tot de getroffen bedrijfsmodi behoort; bij het vervangen moeten ze toch naar het nieuwe pad verwijzen, anders blijft de oude installatie in gebruik en wordt ze nooit verwijderd.

```powershell
# Geplande taken die PHP aanroepen
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Een eigen onderwerp zijn ontwikkelaarscomputers. XAMPP en vergelijkbare pakketten starten Apache met PHP als module en zijn vaak in het hele bedrijfsnetwerk bereikbaar. Ook daar moet de PHP worden bijgewerkt, en de webserver mag alleen op de eigen computer luisteren.

## Thread Safe of Non Thread Safe: de juiste variant

php.net biedt elke Windows-versie in meerdere varianten aan. Voor de vervanging geldt: dezelfde variant en architectuur als eerder, anders laden webserver of extensies niet.

| Kenmerk | Opties | Wanneer welke |
|---|---|---|
| Threadveiligheid | NTS (Non Thread Safe), TS (Thread Safe) | volgens php.net NTS voor FastCGI, bijvoorbeeld IIS, en opdrachtregel; TS voor PHP als module in Apache |
| Architectuur | x64, x86 | php.net adviseert x64 |
| Compiler | VS16, VS17 | vereist de Visual C++ Redistributable voor Visual Studio 2015 tot 2022 |

Voor PHP 8.5 vermeldde php.net bij het opvragen op 25 oktober 2026 de versie 8.5.12 van 21 oktober 2026, als ZIP-archief in alle vier de combinaties. De overige ondersteunde takken kiest u op dezelfde pagina. Verholpen zijn 8.5.12, 8.4.27, 8.3.36 en 8.2.35. Voor 8.1 en ouder bestaan geen officiële updates meer.

## PHP-update onder Windows: download controleren en netjes vervangen

1. **Verholpen versie laden:** van de Windows-downloadpagina op php.net, passend bij variant en architectuur.
2. **Controlesom vergelijken:** php.net noemt bij elk archief een SHA-256-waarde. Wijkt die af, gebruik het bestand dan niet.
3. **In een nieuwe map uitpakken:** bijvoorbeeld `C:\PHP\8.4.27`, zodat de oude stand als terugweg behouden blijft.
4. **Configuratie overnemen:** de bestaande `php.ini` kopiëren en vergelijken met de nieuwe `php.ini-production`.
5. **Extensies controleren:** Extra DLL-bestanden van derden moeten bij versie, variant en architectuur passen.
6. **Pad omzetten:** in de FastCGI-instelling, in de `LoadModule`-regel van Apache of in de omgevingsvariabele `PATH`.
7. **Herstarten en controleren:** Webserverservice en geplande taken herstarten, dan versie en starttijden controleren.

```powershell
# SHA-256 van het gedownloade bestand berekenen en met php.net vergelijken
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Na de wissel: geladen extensies en versie van de nieuwe installatie
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Start PHP na de wissel niet of meldt het een ontbrekende DLL, dan ontbreekt vaak de Visual C++ Redistributable in de juiste architectuur, of een extensie past niet bij de nieuwe versie. De fout toont zich het snelst als u `php.exe -v` direct op de opdrachtregel aanroept voordat u de webserver omzet. Wat de afzonderlijke vermeldingen van de php.ini doen, legt [De php.ini uitgelegd](https://phpsos.de/nl/php/php-ini-erklaert/) uit.

## Apache onder Windows: modulegebruik serieus nemen

Veel oudere Windows-installaties binden PHP via een `LoadModule`-regel direct in Apache in. Dat is technisch hetzelfde als mod_php onder Linux. Het PHP-team schat het risico van PHP2Shell juist daar het hoogst in, omdat een exploit is getoond voordat er überhaupt toepassingscode draait. Achtergronden staan onder [Waarom mod_php bijzonder kwetsbaar is](https://phpsos.de/nl/php2shell/mod-php-risiko/).

Welke modules een Apache laadt, toont `httpd.exe -M` in de bin-map van de installatie; de opdracht leest alleen. Staat daar een PHP-module, dan heeft de update voorrang. Op middellange termijn loont de overstap naar PHP via FastCGI met een NTS-build, zodat PHP in eigen processen draait. Dat vraagt een test, omdat configuratie en rechten veranderen.

> **Belangrijk:**
> Het vervangen van de bestanden sluit het lek nog niet. Zolang de Apache-service, IIS-applicatiepools of geplande taken met de oude versie draaien, blijft het lek open. Controleer na de update de starttijd van elk proces.

## Na de update: controle en sporen

Leg per installatie pad, versie, variant en datum van de wissel vast. Verwijder oude PHP-mappen pas als de nieuwe stand stabiel draait, en dan ook echt, zodat ze niet per ongeluk weer worden ingebonden.

Een update verwijdert geen malware. Was een Windows-server in de dagen vóór de patch vanaf internet bereikbaar, controleer dan webmappen op nieuwe scriptbestanden, geplande taken en lokale accounts op onbekende vermeldingen en bewaar de webserverlogs vanaf 20 oktober. Waaraan u een inbraak herkent, beschrijft [Ben ik al gecompromitteerd?](https://phpsos.de/nl/php2shell/bin-ich-gehackt-anzeichen/).

## Hoe helpt PHP SOS concreet?

- **Alle installaties vinden:** Wij zoeken PHP op uw Windows-systemen, ook in Apache-modules, ontwikkelaarspakketten en vaktoepassingen.
- **Vervangen en aantonen:** Via de [PHP-patchservice](https://phpsos.de/nl/leistungen/php-patch-service/) stappen wij over op de verholpen versie, controleren wij controlesommen en documenteren wij versie en procesaanvang.
- **Bedrijfsmodus verbeteren:** Waar PHP als Apache-module draait, plannen en testen wij de overstap naar FastCGI.
- **Sporen onderzoeken:** Wij bewaren logs en onderzoeken de systemen op aanwijzingen van een aanval.


## Veelgestelde vragen

**Werkt Windows Update ook PHP bij?**  
Nee. PHP maakt geen deel uit van Windows. Het komt als ZIP-archief van php.net, als onderdeel van een pakket zoals XAMPP of met een vaktoepassing en moet telkens langs die weg worden bijgewerkt.

**Heb ik de Thread-Safe- of de Non-Thread-Safe-versie nodig?**  
Volgens php.net is NTS bedoeld voor FastCGI, dus bijvoorbeeld voor IIS, en voor de opdrachtregel. TS is bedoeld voor gebruik als module in de webserver, bijvoorbeeld in Apache. Neem bij de update dezelfde variant als eerder.

**Hoe controleer ik of de PHP-download echt is?**  
php.net vermeldt bij elk Windows-archief een SHA-256-controlesom. Met Get-FileHash in PowerShell berekent u de controlesom van het gedownloade bestand en vergelijkt u beide waarden teken voor teken.

**Ik gebruik XAMPP op een server. Wat nu?**  
Pakketten zoals XAMPP brengen hun eigen PHP en Apache mee, vaak met PHP als Apache-module. Controleer of het project een versie met verholpen PHP aanbiedt, en zet de installatie anders om naar een onderhouden oplossing. Voor productie zijn dergelijke ontwikkelaarspakketten sowieso niet bedoeld.

## Bronnen

- [php.net: PHP voor Windows downloaden](https://www.php.net/downloads.php?os=windows)
- [PHP: ondersteunde versies](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: documentatie](https://httpd.apache.org/docs/)
