# Aktualizace PHP ve Windows

> Aktualizace PHP ve Windows: zvolit správnou variantu, ověřit stažení pomocí SHA-256, převzít php.ini a dbát na provoz modulu Apache proti PHP2Shell.

Zdroj: https://phpsos.de/cs/blog/php-unter-windows-aktualisieren/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** Ve Windows aktualizujete PHP ručně: stáhnout opravenou verzi z php.net, zvolit stejnou variantu (Thread Safe nebo Non Thread Safe) a architekturu, ověřit stažení pomocí SHA-256, převzít php.ini a rozšíření, přepnout cestu a restartovat všechny procesy PHP. Zvlášť naléhavá je aktualizace, když Apache ve Windows načítá PHP jako modul, protože tento provozní režim tým PHP u PHP2Shell hodnotí nejvýše.

## Kde všude PHP na počítačích s Windows sídlí

Servery s Windows a PHP existují častěji, než si mnozí myslí. Zřídkakdy jde o velký web, často jde o intranety, odborné aplikace nebo nástroje, které před lety někdo zřídil. Provoz pod IIS je podrobně popsán na stránce [Zabezpečení PHP ve Windows a IIS](https://phpsos.de/cs/server/windows-iis-php/). Tento článek se zabývá samotnou aktualizací a případy mimo IIS.

Typickými místy nálezu jsou Apache pro Windows s PHP jako modulem, vývojářské balíky jako XAMPP, WampServer nebo Laragon, které skončily na serveru, vlastní kopie PHP v odborných aplikacích a skripty PHP v plánovaných úlohách. Následující příkazy PowerShellu jen čtou a pomáhají při hledání:

```powershell
# Najít všechny php.exe na jednotce C: (na velkých discích to chvíli trvá)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Která php.exe leží v cestě vyhledávání?
where.exe php

# Běžící procesy PHP a Apache s cestou a časem spuštění
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Verze a načtená konfigurace jedné instalace (cesta jako příklad)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Důležité: Běží-li PHP jako modul Apache, neexistuje samostatný proces PHP. PHP pak sídlí v procesu `httpd.exe`. Kdo hledá jen procesy php-cgi, tyto instalace přehlédne.

Snadno se zapomíná i na plánované úlohy, které volají skripty PHP, například pro importy, reporty nebo srovnání dat. Často používají vlastní, starší `php.exe`. Pro PHP2Shell se považují za méně ohrožené, protože příkazová řádka podle dosavadních údajů php.net nepatří k postiženým provozním režimům; při výměně však musí ukazovat na novou cestu, jinak zůstane stará instalace v používání a nikdy se neodstraní.

```powershell
# Plánované úlohy, které volají PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Samostatným tématem jsou vývojářské počítače. XAMPP a podobné balíky spouštějí Apache s PHP jako modulem a často jsou dostupné v celé firemní síti. I tam je třeba PHP aktualizovat a webový server by měl naslouchat jen na vlastním počítači.

## Thread Safe, nebo Non Thread Safe: správná varianta

php.net nabízí každou verzi pro Windows v několika variantách. Pro výměnu platí: stejná varianta a architektura jako dosud, jinak se webový server nebo rozšíření nenačtou.

| Znak | Možnosti | Kdy která |
|---|---|---|
| Thread safety | NTS (Non Thread Safe), TS (Thread Safe) | podle php.net NTS pro FastCGI, např. IIS, a příkazovou řádku; TS pro PHP jako modul v Apache |
| Architektura | x64, x86 | php.net doporučuje x64 |
| Kompilátor | VS16, VS17 | vyžaduje Visual C++ Redistributable pro Visual Studio 2015 až 2022 |

Pro PHP 8.5 uváděl php.net při dotazu 25. 10. 2026 verzi 8.5.12 z 21. 10. 2026 jako archiv ZIP ve všech čtyřech kombinacích. Ostatní podporované větve zvolíte na téže stránce. Opraveny jsou 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Pro 8.1 a starší už oficiální aktualizace neexistují.

## Aktualizace PHP ve Windows: ověřit stažení a čistě vyměnit

1. **Stáhnout opravenou verzi:** ze stránky ke stažení pro Windows na php.net, podle varianty a architektury.
2. **Porovnat kontrolní součet:** php.net uvádí ke každému archivu hodnotu SHA-256. Liší-li se, soubor nepoužívejte.
3. **Rozbalit do nové složky:** například `C:\PHP\8.4.27`, aby zůstal starý stav pro cestu zpět.
4. **Převzít konfiguraci:** zkopírovat dosavadní `php.ini` a porovnat s novým `php.ini-production`.
5. **Zkontrolovat rozšíření:** Dodatečné soubory DLL od třetích stran musí odpovídat verzi, variantě a architektuře.
6. **Přepnout cestu:** v položce FastCGI, v řádku `LoadModule` Apache nebo v proměnné prostředí `PATH`.
7. **Restartovat a ověřit:** restartovat službu webového serveru a plánované úlohy, poté zkontrolovat verzi a časy spuštění.

```powershell
# Vypočítat SHA-256 staženého souboru a porovnat s php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Po přepnutí: načtená rozšíření a verze nové instalace
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Pokud se PHP po přepnutí nespustí nebo hlásí chybějící DLL, chybí často Visual C++ Redistributable ve správné architektuře, nebo rozšíření neodpovídá nové verzi. Chyba se projeví nejrychleji, když zavoláte `php.exe -v` přímo v příkazové řádce dřív, než přepnete webový server. Co znamenají jednotlivé položky php.ini, vysvětluje [php.ini vysvětleno](https://phpsos.de/cs/php/php-ini-erklaert/).

## Apache ve Windows: vzít provoz modulu vážně

Mnoho starších instalací ve Windows zapojuje PHP přes řádek `LoadModule` přímo do Apache. Technicky je to totéž co mod_php v Linuxu. Tým PHP hodnotí riziko PHP2Shell právě tam nejvýše, protože exploit byl předveden ještě předtím, než se vůbec spustí kód aplikace. Souvislosti najdete v článku [Proč je mod_php zvlášť ohrožen](https://phpsos.de/cs/php2shell/mod-php-risiko/).

Které moduly Apache načítá, ukáže `httpd.exe -M` ve složce bin instalace; příkaz jen čte. Pokud tam stojí modul PHP, má aktualizace přednost. Z dlouhodobého hlediska se vyplatí přechod na PHP přes FastCGI s buildem NTS, aby PHP běželo ve vlastních procesech. To vyžaduje test, protože se mění konfigurace a oprávnění.

> **Důležité:**
> Výměna souborů zranitelnost ještě neuzavírá. Dokud služba Apache, aplikační fondy IIS nebo plánované úlohy běží se starou verzí, zůstává zranitelnost otevřená. Po aktualizaci zkontrolujte čas spuštění každého procesu.

## Po aktualizaci: kontrola a stopy

U každé instalace si poznamenejte cestu, verzi, variantu a datum přechodu. Staré složky PHP odstraňte, až nový stav stabilně běží, a pak skutečně, aby nemohly být omylem znovu zapojeny.

Aktualizace neodstraní škodlivý software. Byl-li server s Windows ve dnech před záplatou dostupný z internetu, zkontrolujte webové adresáře na nové soubory skriptů, plánované úlohy a lokální účty na neznámé položky a zajistěte protokoly webového serveru od 20. října. Podle čeho poznáte průnik, popisuje článek [Jsem už kompromitován?](https://phpsos.de/cs/php2shell/bin-ich-gehackt-anzeichen/).

## Jak konkrétně pomáhá PHP SOS?

- **Najít všechny instalace:** Hledáme PHP na vašich systémech Windows, i v modulech Apache, vývojářských balíčcích a odborných aplikacích.
- **Vyměnit a doložit:** Prostřednictvím [PHP Patch Service](https://phpsos.de/cs/leistungen/php-patch-service/) přecházíme na opravenou verzi, ověřujeme kontrolní součty a dokumentujeme verzi a spuštění procesů.
- **Zlepšit provozní režim:** Kde PHP běží jako modul Apache, plánujeme a testujeme přechod na FastCGI.
- **Zkontrolovat stopy:** Zajišťujeme protokoly a kontrolujeme systémy na známky útoku.


## Časté dotazy

**Aktualizuje Windows Update i PHP?**  
Ne. PHP není součástí Windows. Přichází jako archiv ZIP z php.net, jako součást balíku jako XAMPP nebo s odbornou aplikací a musí se aktualizovat vždy touto cestou.

**Potřebuji verzi Thread Safe, nebo Non Thread Safe?**  
Podle php.net je NTS určeno pro FastCGI, tedy například pro IIS, a pro příkazovou řádku. TS je určeno pro provoz jako modul ve webovém serveru, například v Apache. Při aktualizaci zvolte stejnou variantu jako dosud.

**Jak ověřím, že je stažené PHP pravé?**  
php.net uvádí ke každému archivu pro Windows kontrolní součet SHA-256. Pomocí Get-FileHash v PowerShellu vypočtete kontrolní součet staženého souboru a obě hodnoty porovnáte znak po znaku.

**Používám XAMPP na serveru. Co teď?**  
Balíky jako XAMPP přinášejí vlastní PHP a Apache, často s PHP jako modulem Apache. Zkontrolujte, zda projekt nabízí verzi s opraveným PHP, jinak instalaci přestavte na udržované řešení. Pro produkční provoz takové vývojářské balíky stejně nejsou určeny.

## Zdroje

- [php.net: stažení PHP pro Windows](https://www.php.net/downloads.php?os=windows)
- [PHP: podporované verze](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: dokumentace](https://httpd.apache.org/docs/)
