# PHP atnaujinimas Windows sistemoje

> PHP atnaujinimas Windows: tinkamas variantas, atsisiuntimo patikra per SHA-256, php.ini perkėlimas ir Apache modulio režimas esant PHP2Shell.

Šaltinis: https://phpsos.de/lt/blog/php-unter-windows-aktualisieren/  
Būsena: 2026-10-25  
Teikėjas: PHP SOS, PHP avarinė pagalba ir serverio sauga. Skubi pagalba per „WhatsApp“: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20reikia%20pagalbos%20su%20m%C5%ABs%C5%B3%20PHP%20serveriu.%20%C4%AEmon%C4%97%3A%20%E2%80%A6%20Svetain%C4%97%3A%20%E2%80%A6

**Trumpai:** Windows sistemoje PHP atnaujinate rankiniu būdu: iš php.net atsisiųsti ištaisytą versiją, pasirinkti tą patį variantą (Thread Safe ar Non Thread Safe) ir architektūrą, patikrinti atsisiuntimą per SHA-256, perkelti php.ini ir plėtinius, pakeisti kelią ir paleisti iš naujo visus PHP procesus. Atnaujinimas ypač skubus, jei Apache Windows sistemoje PHP įkelia kaip modulį, nes šį veikimo režimą PHP komanda esant PHP2Shell vertina didžiausiu rizikos lygiu.

## Kur visur Windows kompiuteriuose slypi PHP

Windows serverių su PHP yra dažniau, nei daugelis mano. Retai tai didelė svetainė, dažnai tai intranetai, specializuotos programos ar įrankiai, kuriuos prieš metus kažkas įrengė. Eksploatavimas su IIS išsamiai aprašytas puslapyje [PHP Windows ir IIS apsauga](https://phpsos.de/lt/server/windows-iis-php/). Šis straipsnis nagrinėja patį atnaujinimą ir atvejus už IIS ribų.

Tipinės radimo vietos: Apache Windows sistemai su PHP kaip moduliu, kūrėjų paketai, tokie kaip XAMPP, WampServer ar Laragon, kurie atsidūrė serveryje, savos PHP kopijos specializuotose programose ir PHP skriptai suplanuotose užduotyse. Toliau pateiktos PowerShell komandos tik skaito ir padeda surasti:

```powershell
# Rasti visus php.exe diske C: (dideliuose diskuose užtrunka)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Kuris php.exe yra paieškos kelyje?
where.exe php

# Veikiantys PHP ir Apache procesai su keliu ir paleidimo laiku
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Diegimo versija ir įkelta konfigūracija (kelias kaip pavyzdys)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Svarbu: jei PHP veikia kaip Apache modulis, atskiro PHP proceso nėra. PHP tuomet slypi procese `httpd.exe`. Kas ieško tik php-cgi procesų, šiuos diegimus praleidžia.

Lengvai pamirštamos ir suplanuotos užduotys, kurios kviečia PHP skriptus, pavyzdžiui, importui, ataskaitoms ar duomenų suderinimui. Jos dažnai naudoja savo, senesnį `php.exe`. PHP2Shell atžvilgiu jos laikomos mažiau pavojingomis, nes komandinė eilutė pagal dabartinius php.net duomenis nepriklauso paveiktiems veikimo režimams; keičiant jos vis tiek turi rodyti į naują kelią, kitaip sena versija lieka naudojama ir niekada nepašalinama.

```powershell
# Suplanuotos užduotys, kurios kviečia PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Atskira tema yra kūrėjų kompiuteriai. XAMPP ir panašūs paketai paleidžia Apache su PHP kaip moduliu ir dažnai yra pasiekiami visame įmonės tinkle. Ir ten PHP reikia atnaujinti, o žiniatinklio serveris turėtų klausytis tik savo kompiuteryje.

## Thread Safe ar Non Thread Safe: tinkamas variantas

php.net kiekvieną Windows versiją siūlo keliais variantais. Keičiant galioja: tas pats variantas ir architektūra kaip iki šiol, kitaip žiniatinklio serveris ar plėtiniai neįsikels.

| Požymis | Parinktys | Kada kuri |
|---|---|---|
| Gijų saugumas | NTS (Non Thread Safe), TS (Thread Safe) | pagal php.net NTS FastCGI, pavyzdžiui, IIS, ir komandinei eilutei; TS PHP kaip moduliui Apache |
| Architektūra | x64, x86 | php.net rekomenduoja x64 |
| Kompiliatorius | VS16, VS17 | reikia Visual C++ Redistributable, skirto Visual Studio 2015–2022 |

PHP 8.5 php.net peržiūrint 2026-10-25 nurodė 8.5.12 versiją nuo 2026-10-21, kaip ZIP archyvą visais keturiais deriniais. Likusias palaikomas šakas pasirenkate tame pačiame puslapyje. Ištaisytos 8.5.12, 8.4.27, 8.3.36 ir 8.2.35. 8.1 ir senesnėms oficialių atnaujinimų nebėra.

## PHP atnaujinimas Windows: atsisiuntimo patikra ir tvarkingas pakeitimas

1. **Atsisiųsti ištaisytą versiją:** iš Windows atsisiuntimų puslapio php.net, atitinkančią variantą ir architektūrą.
2. **Palyginti kontrolinę sumą:** php.net prie kiekvieno archyvo nurodo SHA-256 reikšmę. Jei ji skiriasi, failo nenaudokite.
3. **Išpakuoti į naują aplanką:** pavyzdžiui, `C:\PHP\8.4.27`, kad sena būsena liktų kaip kelias atgal.
4. **Perkelti konfigūraciją:** nukopijuoti ankstesnį `php.ini` ir palyginti su nauju `php.ini-production`.
5. **Patikrinti plėtinius:** papildomi trečiųjų šalių DLL failai turi atitikti versiją, variantą ir architektūrą.
6. **Pakeisti kelią:** FastCGI įraše, Apache eilutėje `LoadModule` arba aplinkos kintamajame `PATH`.
7. **Paleisti iš naujo ir patikrinti:** iš naujo paleisti žiniatinklio serverio tarnybą ir suplanuotas užduotis, tada patikrinti versiją ir paleidimo laikus.

```powershell
# Apskaičiuoti atsisiųsto failo SHA-256 ir palyginti su php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Po perjungimo: įkelti plėtiniai ir naujo diegimo versija
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Jei PHP po perjungimo nepasileidžia arba praneša apie trūkstamą DLL, dažnai trūksta Visual C++ Redistributable tinkamai architektūrai arba plėtinys neatitinka naujos versijos. Klaida greičiausiai išryškėja, kai `php.exe -v` iškviečiate tiesiai komandinėje eilutėje prieš perjungdami žiniatinklio serverį. Ką daro atskiri php.ini įrašai, paaiškina [php.ini paaiškinimas](https://phpsos.de/lt/php/php-ini-erklaert/).

## Apache Windows sistemoje: modulio režimą vertinti rimtai

Daug senesnių Windows diegimų PHP įtraukia eilute `LoadModule` tiesiai į Apache. Techniškai tai tas pats, kas mod_php Linux sistemoje. PHP komanda PHP2Shell riziką būtent ten vertina didžiausia, nes išnaudojimas buvo parodytas dar prieš pradedant vykdyti programos kodą. Pagrindai pateikti skiltyje [Kodėl mod_php ypač pažeidžiamas](https://phpsos.de/lt/php2shell/mod-php-risiko/).

Kokius modulius Apache įkelia, parodo `httpd.exe -M` diegimo bin aplanke; komanda tik skaito. Jei ten yra PHP modulis, atnaujinimas turi pirmenybę. Vidutiniu laikotarpiu verta pereiti prie PHP per FastCGI su NTS kūriniu, kad PHP veiktų savo procesuose. Tam reikia testo, nes keičiasi konfigūracija ir teisės.

> **Svarbu:**
> Failų pakeitimas spragos dar neuždaro. Kol Apache tarnyba, IIS programų baseinai ar suplanuotos užduotys veikia su sena versija, spraga lieka atvira. Po atnaujinimo patikrinkite kiekvieno proceso paleidimo laiką.

## Po atnaujinimo: kontrolė ir pėdsakai

Kiekvienam diegimui užfiksuokite kelią, versiją, variantą ir pakeitimo datą. Senus PHP aplankus šalinkite tik tada, kai naujoji būsena veikia stabiliai, ir tada tikrai, kad jie netyčia vėl nebūtų įtraukti.

Atnaujinimas nepašalina kenkėjiškos programinės įrangos. Jei Windows serveris dienomis iki pataisos buvo pasiekiamas iš interneto, patikrinkite žiniatinklio katalogus dėl naujų skriptų failų, suplanuotas užduotis ir vietines paskyras dėl nežinomų bei išsaugokite žiniatinklio serverio protokolus nuo spalio 20 d. Kaip atpažinti įsilaužimą, aprašo [Ar jau esu pažeistas?](https://phpsos.de/lt/php2shell/bin-ich-gehackt-anzeichen/).

## Kaip PHP SOS padeda konkrečiai?

- **Rasti visus diegimus:** ieškome PHP jūsų Windows sistemose, taip pat Apache moduliuose, kūrėjų paketuose ir specializuotose programose.
- **Pakeisti ir įrodyti:** per [PHP pataisų paslaugą](https://phpsos.de/lt/leistungen/php-patch-service/) pereiname prie ištaisytos versijos, tikriname kontrolines sumas ir dokumentuojame versiją bei proceso paleidimą.
- **Pagerinti veikimo režimą:** kur PHP veikia kaip Apache modulis, planuojame ir išbandome perėjimą prie FastCGI.
- **Patikrinti pėdsakus:** išsaugome protokolus ir tikriname sistemas dėl atakos požymių.


## Dažni klausimai

**Ar Windows Update atnaujina ir PHP?**  
Ne. PHP nėra Windows dalis. Jis ateina kaip ZIP archyvas iš php.net, kaip paketo, pavyzdžiui, XAMPP, dalis arba kartu su specializuota programa, ir kiekvienu atveju turi būti atnaujinamas tuo pačiu keliu.

**Ar man reikia Thread Safe ar Non Thread Safe versijos?**  
Pagal php.net, NTS skirta FastCGI, taigi, pavyzdžiui, IIS, ir komandinei eilutei. TS skirta veikti kaip žiniatinklio serverio modulis, pavyzdžiui, Apache. Atnaujindami rinkitės tą patį variantą kaip iki šiol.

**Kaip patikrinti, ar PHP atsisiuntimas tikras?**  
php.net prie kiekvieno Windows archyvo nurodo SHA-256 kontrolinę sumą. Su Get-FileHash PowerShell apskaičiuokite atsisiųsto failo kontrolinę sumą ir palyginkite abi reikšmes simbolis po simbolio.

**Serveryje naudoju XAMPP. Ką daryti dabar?**  
Paketai, tokie kaip XAMPP, atsineša savo PHP ir Apache, dažnai su PHP kaip Apache moduliu. Patikrinkite, ar projektas siūlo versiją su ištaisytu PHP, o jei ne, diegimą perjunkite į prižiūrimą sprendimą. Gamybai tokie kūrėjų paketai vis tiek neskirti.

## Šaltiniai

- [php.net: PHP atsisiuntimas Windows](https://www.php.net/downloads.php?os=windows)
- [PHP: palaikomos versijos](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: dokumentacija](https://httpd.apache.org/docs/)
