# PHP:n päivittäminen Windowsissa

> PHP-päivitys Windowsissa: valitse oikea variantti, tarkista lataus SHA-256:lla, siirrä php.ini ja huomioi Apache-moduuliajo PHP2Shellin kannalta.

Lähde: https://phpsos.de/fi/blog/php-unter-windows-aktualisieren/  
Tilanne: 25.10.2026  
Palveluntarjoaja: PHP SOS, PHP-hätäapu ja palvelimen tietoturva. Pikaapu WhatsAppilla: https://wa.me/491736494914?text=Hei%20PHP%20SOS%2C%20tarvitsemme%20apua%20PHP-palvelimemme%20kanssa.%20Yritys%3A%20%E2%80%A6%20Verkkosivusto%3A%20%E2%80%A6

**Lyhyesti:** Windowsissa päivitätte PHP:n käsin: ladatkaa korjattu versio php.netistä, valitkaa sama variantti (Thread Safe tai Non Thread Safe) ja arkkitehtuuri, tarkistakaa lataus SHA-256:lla, siirtäkää php.ini ja laajennukset, vaihtakaa polku ja käynnistäkää kaikki PHP-prosessit uudelleen. Päivitys on erityisen kiireellinen, jos Apache lataa Windowsissa PHP:n moduulina, sillä tämän ajotavan PHP-tiimi arvioi PHP2Shellin kohdalla riskialtteimmaksi.

## Missä kaikkialla PHP piilee Windows-koneilla

Windows-palvelimia PHP:llä on useammin kuin monet ajattelevat. Harvoin kyse on suuresta verkkosivustosta, usein intraneteista, erikoissovelluksista tai työkaluista, jotka joku on pystyttänyt vuosia sitten. IIS:llä toimimista kuvataan perusteellisesti sivulla [PHP:n suojaaminen Windowsissa ja IIS:ssä](https://phpsos.de/fi/server/windows-iis-php/). Tämä artikkeli käsittelee itse päivitystä ja IIS:n ulkopuolisia tapauksia.

Tyypillisiä löytöpaikkoja ovat Apache for Windows PHP-moduulilla, kehittäjäpaketit kuten XAMPP, WampServer tai Laragon, jotka ovat päätyneet palvelimelle, erikoissovellusten omat PHP-kopiot ja ajastetuissa tehtävissä olevat PHP-skriptit. Seuraavat PowerShell-komennot vain lukevat ja auttavat löytämisessä:

```powershell
# Etsi kaikki php.exe-tiedostot asemalta C: (suurilla asemilla kestää hetken)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
  Select-Object FullName, LastWriteTime

# Mikä php.exe on hakupolulla?
where.exe php

# Käynnissä olevat PHP- ja Apache-prosessit polun ja käynnistysajan kanssa
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path

# Asennuksen versio ja ladattu konfiguraatio (polku esimerkkinä)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
```

Tärkeää: jos PHP toimii Apache-moduulina, omaa PHP-prosessia ei ole. PHP on silloin prosessissa `httpd.exe`. Jos etsii vain php-cgi-prosesseja, nämä asennukset jäävät huomaamatta.

Helposti unohtuvat myös ajastetut tehtävät, jotka kutsuvat PHP-skriptejä, esimerkiksi tuonteja, raportteja tai tietojen täsmäytyksiä. Ne käyttävät usein omaa, vanhempaa `php.exe`-tiedostoa. PHP2Shellin kannalta ne ovat vähemmän alttiita, koska komentorivi ei php.netin toistaiseksi antamien tietojen mukaan kuulu haavoittuviin ajotapoihin; vaihdon yhteydessä niiden on silti osoitettava uuteen polkuun, muuten vanha asennus pysyy käytössä eikä sitä koskaan poisteta.

```powershell
# Ajastetut tehtävät, jotka kutsuvat PHP:tä
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
  Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
```

Oma aiheensa ovat kehittäjien koneet. XAMPP ja vastaavat paketit käynnistävät Apachen PHP:n kanssa moduulina ja ovat usein tavoitettavissa koko yrityksen verkossa. Niissäkin PHP on päivitettävä, ja verkkopalvelimen pitäisi kuunnella vain omaa konetta.

## Thread Safe vai Non Thread Safe: oikea variantti

php.net tarjoaa jokaisen Windows-version useina variantteina. Vaihdossa pätee: sama variantti ja arkkitehtuuri kuin tähän asti, muuten verkkopalvelin tai laajennukset eivät lataudu.

| Ominaisuus | Vaihtoehdot | Milloin mikä |
|---|---|---|
| Säikeiden turvallisuus | NTS (Non Thread Safe), TS (Thread Safe) | php.netin mukaan NTS FastCGI:lle, esim. IIS, ja komentoriville; TS PHP:lle moduulina Apachessa |
| Arkkitehtuuri | x64, x86 | php.net suosittelee x64:ää |
| Kääntäjä | VS16, VS17 | vaatii Visual C++ Redistributablen Visual Studiolle 2015–2022 |

PHP 8.5:lle php.net listasi 25.10.2026 tehdyssä haussa version 8.5.12 päivältä 21.10.2026, ZIP-arkistona kaikissa neljässä yhdistelmässä. Muut tuetut haarat valitsette samalta sivulta. Korjattuja ovat 8.5.12, 8.4.27, 8.3.36 ja 8.2.35. Versioille 8.1 ja vanhemmat ei ole enää virallisia päivityksiä.

## PHP-päivitys Windowsissa: lataus tarkistettuna ja siisti vaihto

1. **Ladatkaa korjattu versio:** php.netin Windows-lataussivulta, variantin ja arkkitehtuurin mukaan.
2. **Verratkaa tarkistussumma:** php.net ilmoittaa jokaiselle arkistolle SHA-256-arvon. Jos se poikkeaa, älkää käyttäkö tiedostoa.
3. **Purkakaa uuteen kansioon:** esimerkiksi `C:\PHP\8.4.27`, jotta vanha tila säilyy paluutienä.
4. **Siirtäkää konfiguraatio:** kopioikaa aiempi `php.ini` ja verratkaa sitä uuteen `php.ini-production`-tiedostoon.
5. **Tarkistakaa laajennukset:** Kolmansien osapuolten lisä-DLL-tiedostojen on sovittava versioon, varianttiin ja arkkitehtuuriin.
6. **Vaihtakaa polku:** FastCGI-merkinnässä, Apachen `LoadModule`-rivillä tai ympäristömuuttujassa `PATH`.
7. **Käynnistäkää uudelleen ja tarkistakaa:** Käynnistäkää verkkopalvelimen palvelu ja ajastetut tehtävät uudelleen ja tarkistakaa sitten versio ja käynnistysajat.

```powershell
# Laske ladatun tiedoston SHA-256 ja vertaa php.netin arvoon
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256

# Vaihdon jälkeen: ladatut laajennukset ja uuden asennuksen versio
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
```

Jos PHP ei käynnisty vaihdon jälkeen tai ilmoittaa puuttuvasta DLL-tiedostosta, usein puuttuu sopivan arkkitehtuurin Visual C++ Redistributable tai jokin laajennus ei sovi uuteen versioon. Virhe paljastuu nopeimmin, kun kutsutte `php.exe -v` suoraan komentorivillä ennen kuin vaihdatte verkkopalvelimen asetukset. Mitä php.ini-tiedoston yksittäiset merkinnät tekevät, selittää [php.ini selitettynä](https://phpsos.de/fi/php/php-ini-erklaert/).

## Apache Windowsissa: moduuliajo otettava vakavasti

Monet vanhemmat Windows-asennukset liittävät PHP:n suoraan Apacheen `LoadModule`-rivillä. Se on teknisesti sama asia kuin mod_php Linuxissa. PHP-tiimi arvioi PHP2Shellin riskin juuri siellä suurimmaksi, koska siinä on esitetty hyökkäys, joka toimii jo ennen kuin sovelluskoodia ajetaan. Taustat ovat sivulla [Miksi mod_php on erityisen haavoittuva](https://phpsos.de/fi/php2shell/mod-php-risiko/).

Mitä moduuleja Apache lataa, näyttää `httpd.exe -M` asennuksen bin-kansiossa; komento vain lukee. Jos siellä on PHP-moduuli, päivitys on etusijalla. Keskipitkällä aikavälillä kannattaa siirtyä PHP:hen FastCGI:n kautta NTS-buildillä, jotta PHP toimii omissa prosesseissaan. Se vaatii testin, koska konfiguraatio ja oikeudet muuttuvat.

> **Tärkeää:**
> Tiedostojen vaihto ei vielä sulje aukkoa. Niin kauan kuin Apache-palvelu, IIS:n sovelluspoolit tai ajastetut tehtävät toimivat vanhalla versiolla, aukko pysyy auki. Tarkistakaa jokaisen prosessin käynnistysaika päivityksen jälkeen.

## Päivityksen jälkeen: tarkistus ja jäljet

Kirjatkaa asennusta kohti polku, versio, variantti ja vaihdon päivämäärä. Poistakaa vanhat PHP-kansiot vasta, kun uusi tila toimii vakaasti, ja sitten todella, jotta niitä ei vahingossa oteta uudelleen käyttöön.

Päivitys ei poista haittaohjelmaa. Jos Windows-palvelin oli ennen korjausta tavoitettavissa internetistä, tarkistakaa verkkohakemistoista uudet skriptitiedostot, ajastetut tehtävät ja paikalliset tilit tuntemattomien varalta ja varmistakaa verkkopalvelimen lokit 20. lokakuuta alkaen. Mistä murron tunnistaa, kuvaa [Olenko jo vaarantunut?](https://phpsos.de/fi/php2shell/bin-ich-gehackt-anzeichen/).

## Miten PHP SOS auttaa konkreettisesti?

- **Kaikkien asennusten löytäminen:** Etsimme PHP:n Windows-järjestelmistänne, myös Apache-moduuleista, kehittäjäpaketeista ja erikoissovelluksista.
- **Vaihto ja todistus:** [PHP-päivityspalvelun](https://phpsos.de/fi/leistungen/php-patch-service/) kautta vaihdamme korjattuun versioon, tarkistamme tarkistussummat ja dokumentoimme version ja prosessin käynnistyksen.
- **Ajotavan parantaminen:** Missä PHP toimii Apache-moduulina, suunnittelemme ja testaamme siirtymän FastCGI:hin.
- **Jälkien tarkistus:** Varmistamme lokit ja tarkistamme järjestelmistä hyökkäykseen viittaavat merkit.


## Usein kysytyt kysymykset

**Päivittääkö Windows Update myös PHP:n?**  
Ei. PHP ei kuulu Windowsiin. Se tulee ZIP-arkistona php.netistä, osana pakettia kuten XAMPP tai erikoissovelluksen mukana, ja se on päivitettävä kulloinkin samaa tietä.

**Tarvitsenko Thread Safe- vai Non-Thread-Safe-version?**  
php.netin mukaan NTS on tarkoitettu FastCGI:lle, esimerkiksi IIS:lle, ja komentorivikäyttöön. TS on tarkoitettu käyttöön moduulina verkkopalvelimessa, esimerkiksi Apachessa. Valitkaa päivityksessä sama variantti kuin tähän asti.

**Miten tarkistan, että PHP-lataus on aito?**  
php.net ilmoittaa jokaiselle Windows-arkistolle SHA-256-tarkistussumman. PowerShellin Get-FileHash-komennolla lasketaan ladatun tiedoston tarkistussumma, ja molemmat arvot verrataan merkki merkiltä.

**Käytän XAMPPia palvelimella. Mitä nyt?**  
XAMPP-tyyppiset paketit tuovat mukanaan oman PHP:nsä ja Apachensa, usein PHP Apache-moduulina. Tarkistakaa, tarjoaako projekti version korjatulla PHP:llä, ja siirtäkää asennus muuten ylläpidettyyn ratkaisuun. Tuotantokäyttöön tällaisia kehittäjäpaketteja ei muutenkaan ole tarkoitettu.

## Lähteet

- [php.net: PHP:n lataus Windowsille](https://www.php.net/downloads.php?os=windows)
- [PHP: tuetut versiot](https://www.php.net/supported-versions.php)
- [Apache HTTP Server: dokumentaatio](https://httpd.apache.org/docs/)
