Röviden: Windowson a PHP-t kézzel frissíti: töltse le a kijavított verziót a php.net-ről, válassza ugyanazt a változatot (Thread Safe vagy Non Thread Safe) és architektúrát, ellenőrizze a letöltést SHA-256-tal, vegye át a php.ini-t és a bővítményeket, állítsa át az útvonalat, és indítsa újra az összes PHP-folyamatot. A frissítés különösen sürgős, ha az Apache Windows alatt modulként tölti be a PHP-t, mert ezt az üzemmódot a PHP-csapat a PHP2Shellnél a legmagasabbra értékeli.
Hol bújik meg a PHP a Windows-gépeken
A PHP-vel futó Windows-szerverek gyakoribbak, mint sokan gondolják. Ritkán a nagy weboldal, gyakrabban intranetek, szakalkalmazások vagy eszközök, amelyeket évekkel ezelőtt valaki beállított. Az IIS alatti üzemeltetést a PHP védelme Windowson és IIS-en oldal részletesen leírja. Ez a cikk magát a frissítést és az IIS-en kívüli eseteket tárgyalja.
Tipikus lelőhelyek: az Apache Windowsra PHP-vel modulként, a szerveren landolt fejlesztői csomagok, például a XAMPP, a WampServer vagy a Laragon, a szakalkalmazások saját PHP-másolatai és az ütemezett feladatokban lévő PHP-szkriptek. A következő PowerShell-parancsok csak olvasnak, és segítenek a keresésben:
# Az összes php.exe megkeresése a C: meghajtón (nagy meghajtókon eltart egy ideig)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Melyik php.exe van a keresési útvonalon?
where.exe php
# Futó PHP- és Apache-folyamatok útvonallal és indulási idővel
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Egy telepítés verziója és betöltött konfigurációja (az útvonal példa)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Fontos: ha a PHP Apache-modulként fut, nincs önálló PHP-folyamat. A PHP ilyenkor a httpd.exe folyamatban van. Aki csak php-cgi-folyamatokat keres, ezeket a telepítéseket figyelmen kívül hagyja.
Könnyen elfelejtődnek az ütemezett feladatok is, amelyek PHP-szkripteket hívnak, például importokhoz, jelentésekhez vagy adategyeztetésekhez. Gyakran saját, régebbi php.exe-t használnak. A PHP2Shell szempontjából kevésbé veszélyeztetettnek számítanak, mert a php.net eddigi adatai szerint a parancssor nem tartozik az érintett üzemmódok közé; a cserénél mégis az új útvonalra kell mutatniuk, különben a régi telepítés használatban marad, és soha nem távolítják el.
# PHP-t hívó ütemezett feladatok
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Külön téma a fejlesztői gépek. A XAMPP és hasonló csomagok az Apache-ot PHP-vel modulként indítják, és gyakran az egész céges hálózatból elérhetők. Ott is frissíteni kell a PHP-t, és a webszervernek csak a saját gépen szabad figyelnie.
Thread Safe vagy Non Thread Safe: a megfelelő változat
A php.net minden Windows-verziót több változatban kínál. A cserénél érvényes: ugyanaz a változat és architektúra, mint eddig, különben a webszerver vagy a bővítmények nem töltődnek be.
| Jellemző | Lehetőségek | Mikor melyik |
|---|---|---|
| Szálbiztonság | NTS (Non Thread Safe), TS (Thread Safe) | a php.net szerint az NTS a FastCGI-hez, pl. IIS-hez, és a parancssorhoz; a TS a PHP-hez Apache-ban modulként |
| Architektúra | x64, x86 | a php.net az x64-et ajánlja |
| Fordító | VS16, VS17 | a Visual Studio 2015–2022 Visual C++ Redistributable csomagot igényli |
A PHP 8.5-höz a php.net a 2026. október 25-i lekérdezéskor a 8.5.12 verziót listázta 2026. október 21-i dátummal, ZIP-archívumként mind a négy kombinációban. A többi támogatott ágat ugyanazon az oldalon választhatja ki. Kijavítottak a 8.5.12, 8.4.27, 8.3.36 és 8.2.35. A 8.1-hez és a régebbiekhez nincsenek hivatalos frissítések.
PHP-frissítés Windowson: a letöltés ellenőrzése és tiszta csere
- Töltse le a kijavított verziót: a php.net Windows-letöltési oldaláról, a változatnak és az architektúrának megfelelően.
- Vesse össze az ellenőrző összeget: a php.net minden archívumhoz megad egy SHA-256 értéket. Ha eltér, ne használja a fájlt.
- Csomagolja ki egy új mappába: például
C:\PHP\8.4.27, hogy a régi állapot visszaútként megmaradjon. - Vegye át a konfigurációt: másolja a korábbi
php.inifájlt, és hasonlítsa össze az újphp.ini-productionfájllal. - Ellenőrizze a bővítményeket: A harmadik féltől származó további DLL-fájloknak illeszkedniük kell a verzióhoz, a változathoz és az architektúrához.
- Állítsa át az útvonalat: a FastCGI-bejegyzésben, az Apache
LoadModulesorában vagy aPATHkörnyezeti változóban. - Indítsa újra és ellenőrizze: indítsa újra a webszerver-szolgáltatást és az ütemezett feladatokat, majd ellenőrizze a verziót és az indulási időket.
# A letöltött fájl SHA-256 értékének kiszámítása és összevetése a php.net értékével
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# A váltás után: az új telepítés betöltött bővítményei és verziója
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Ha a PHP a váltás után nem indul, vagy hiányzó DLL-t jelez, gyakran a megfelelő architektúrájú Visual C++ Redistributable hiányzik, vagy egy bővítmény nem illik az új verzióhoz. A hiba a leggyorsabban akkor derül ki, ha a php.exe -v parancsot közvetlenül a parancssorban hívja meg, mielőtt átállítja a webszervert. Hogy a php.ini egyes bejegyzései mit okoznak, azt a A php.ini magyarázata írja le.
Apache Windowson: vegye komolyan a modulüzemmódot
Sok régebbi Windows-telepítés a PHP-t egy LoadModule sorral közvetlenül az Apache-ba köti be. Technikailag ez ugyanaz, mint a mod_php Linuxon. A PHP-csapat a PHP2Shell kockázatát éppen ott értékeli a legmagasabbra, mert még az alkalmazáskód futása előtt bemutattak egy exploitot. A hátteret a Miért különösen veszélyeztetett a mod_php oldal ismerteti.
Hogy az Apache mely modulokat tölti be, azt a httpd.exe -M mutatja a telepítés bin mappájában; a parancs csak olvas. Ha ott PHP-modul áll, a frissítésnek elsőbbsége van. Középtávon megéri a váltás PHP-re FastCGI-n keresztül NTS buildekkel, hogy a PHP saját folyamatokban fusson. Ez tesztet igényel, mert a konfiguráció és a jogosultságok változnak.
A fájlok cseréje még nem zárja be a rést. Amíg az Apache-szolgáltatás, az IIS-alkalmazáskészletek vagy az ütemezett feladatok a régi verzióval futnak, a rés nyitva marad. A frissítés után ellenőrizze minden folyamat indulási idejét.
A frissítés után: ellenőrzés és nyomok
Telepítésenként rögzítse az útvonalat, a verziót, a változatot és a váltás dátumát. A régi PHP-mappákat csak akkor távolítsa el, amikor az új állapot stabilan fut, és akkor valóban, hogy véletlenül ne kössék be újra.
A frissítés nem távolítja el a kártevőt. Ha egy Windows-szerver a javítás előtti napokban elérhető volt az internetről, ellenőrizze a webkönyvtárakat új szkriptfájlokra, az ütemezett feladatokat és a helyi fiókokat ismeretlenre, és mentse a webszerver-naplókat 2026. október 20-tól. Hogy miről ismeri fel a behatolást, azt a Megfertőzték már a rendszeremet? oldal írja le.
Hogyan segít konkrétan a PHP SOS?
- Az összes telepítés megkeresése: Megkeressük a PHP-t a Windows-rendszerein, az Apache-modulokban, a fejlesztői csomagokban és a szakalkalmazásokban is.
- Csere és igazolás: A PHP-javítási szolgáltatáson keresztül átváltunk a kijavított verzióra, ellenőrizzük az ellenőrző összegeket, és dokumentáljuk a verziót és a folyamatindulást.
- Az üzemmód javítása: Ahol a PHP Apache-modulként fut, megtervezzük és teszteljük az átállást FastCGI-re.
- Nyomok vizsgálata: Mentjük a naplókat, és ellenőrizzük a rendszereket támadásra utaló jelekre.
Gyakori kérdések
A Windows Update a PHP-t is frissíti?
Nem. A PHP nem része a Windowsnak. ZIP-archívumként érkezik a php.net-ről, egy csomag, például a XAMPP részeként vagy egy szakalkalmazással, és mindig ezen az úton kell frissíteni.
Thread Safe vagy Non Thread Safe változatra van szükségem?
A php.net szerint az NTS a FastCGI-hez, vagyis például az IIS-hez, és a parancssorhoz való. A TS a webszerverben modulként való üzemeltetésre való, például Apache-ban. A frissítésnél ugyanazt a változatot válassza, mint eddig.
Hogyan ellenőrzöm, hogy a PHP-letöltés valódi-e?
A php.net minden Windows-archívumhoz megad egy SHA-256 ellenőrző összeget. A PowerShellben a Get-FileHash paranccsal kiszámítja a letöltött fájl ellenőrző összegét, és karakterről karakterre összeveti a két értéket.
XAMPP-ot használok egy szerveren. Mi a teendő?
Az olyan csomagok, mint a XAMPP, saját PHP-t és Apache-ot hoznak magukkal, gyakran a PHP-vel Apache-modulként. Nézze meg, kínál-e a projekt kijavított PHP-vel készült verziót, és ha nem, állítsa át a telepítést egy gondozott megoldásra. Éles üzemre az ilyen fejlesztői csomagok amúgy sem valók.