# Kelios PHP versijos viename serveryje: kiekvieną pataisyti atskirai

> Kelios PHP versijos viename serveryje: suraskite visus diegimus, išsiaiškinkite atsakomybę, pataisykite kiekvieną, paleiskite iš naujo ir dokumentuokite.

Šaltinis: https://phpsos.de/lt/blog/mehrere-php-versionen-server/  
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:** kai serveryje veikia kelios PHP versijos, po PHP2Shell kiekvieną reikia atskirai patikrinti, atnaujinti ir paleisti iš naujo. Tipiniai šaltiniai yra operacinė sistema, hostingo valdymo skydeliai, tokie kaip Plesk ar cPanel, trečiųjų šalių šaltiniai, tokie kaip sury.org ar Remi, CloudLinux, LiteSpeed ir pačių sukompiliuotos versijos. Tik išsamus sąrašas iš paketų, failų ir veikiančių procesų parodo, ar tikrai nė viena versija nepražiūrėta.

## Pamirštoji versija

Serveris, veikiantis jau keletą metų, kaupia PHP versijas, kaip palėpė senus baldus. Skydelis atnešė tris šakas, vienam klientui atsirado senesnė versija iš trečiosios šalies šaltinio, operacinė sistema turi savo. Kiekviena jų kada nors buvo įdiegta dėl rimtos priežasties. Tik šiandien niekas nebežino, kuri dar reikalinga.

Po PHP2Shell tai kaip tik ir yra problema. Pataisos pasirodė 2026 m. spalio 21 d. PHP 8.5.12, 8.4.27, 8.3.36 ir 8.2.35. Tačiau kiekvienas serverio diegimas jas gauna savo keliu, iš savo paketo prižiūrėtojo ir savo laiku. PHP 8.1 ir senesnėms yra tik minimalūs šaltinio kodo atgaliniai perkėlimai. Kas atnaujina tik pagrindinę versiją, kitas palieka atviras.

## Iš kur tiek versijų

Toliau pateikta apžvalga nurodo tipinius šaltinius ir pavyzdinius kelius. Tikslūs keliai skiriasi pagal versiją ir distribuciją.

| Šaltinis | Pavyzdinis kelias | Kas teikia pataisą |
|---|---|---|
| Operacinė sistema Debian/Ubuntu | `/usr/bin/php8.3`, `/etc/php/8.3/` | distribucija |
| Operacinė sistema RHEL šeima | `/usr/bin/php`, `/etc/php-fpm.d/` | distribucija |
| Plesk | `/opt/plesk/php/8.3/` | Plesk |
| cPanel (EasyApache 4) | `/opt/cpanel/ea-php83/` | cPanel |
| CloudLinux alt-php | `/opt/alt/php83/` | CloudLinux |
| Remi programinės įrangos kolekcija | `/opt/remi/php83/` | Remi |
| sury.org | `/usr/bin/php8.3` kaip ir sistemoje | sury.org |
| LiteSpeed | `/usr/local/lsws/lsphp83/` | LiteSpeed arba paketų šaltinis |
| Sukompiliuota pačių | dažnai `/usr/local/bin/php` | jūs patys |
| Konteineris | atvaizde (image) | atvaizdo leidėjas, perkūrimas jūsų |

Ypač klastingi yra sury.org paketai, nes jie naudoja tuos pačius kelius kaip distribucija. Ar `php8.3` yra iš Debian, ar iš sury.org, parodo tik paketų šaltinis. Ypatumus aprašo straipsniai [sury.org saugykla](https://phpsos.de/lt/blog/sury-repository-php/) ir [Remi saugykla](https://phpsos.de/lt/blog/remi-repository-php/). Kaip Plesk valdo savo versijas, aprašo puslapis [Plesk serveris: PHP versijų patikra ir pataisymas](https://phpsos.de/lt/server/plesk/).

## Surasti visus PHP diegimus

Patikimas sąrašas atsiranda iš trijų žvilgsnių. Komandos tik skaito ir, priklausomai nuo serverio, gali veikti kurį laiką.

```bash
# 1. Paketai: ką žino paketų valdymas
dpkg-query -W -f='${Package}\t${Version}\n' '*php*' 2>/dev/null | grep -E "fpm|cli|cgi|mod-php|lsphp"
rpm -qa 2>/dev/null | grep -iE "php.*(fpm|cli|cgi|litespeed)|^php-[0-9]|^ea-php|^alt-php" | sort

# 2. Failai: vykdomieji PHP failai, taip pat už paketų valdymo ribų
find / -xdev -type f \( -name 'php' -o -name 'php[0-9]*' -o -name 'php-fpm*' -o -name 'php-cgi*' -o -name 'lsphp*' \) -perm -u+x 2>/dev/null

# 3. Procesai: kas iš tiesų veikia dabar, su paleidimo laiku
ps -eo pid,user,lstart,cmd | grep -E "[p]hp-fpm|[p]hp-cgi|[l]sphp|[a]pache2|[h]ttpd|[f]rankenphp"
```

Palyginkite tris sąrašus. Failas be paketo rodo pačių sukompiliuotą ar rankiniu būdu nukopijuotą versiją. Procesas be atitinkamo failo gali rodyti ištrintą, bet dar veikiantį diegimą. Naudojant Apache papildomai patikrinkite, ar įkeltas PHP modulis, pavyzdžiui, komanda `apache2ctl -M` arba `httpd -M`. Konteineriai ir Kubernetes podai šiuose sąrašuose atsispindi tik iš dalies ir reikalauja atskiros atvaizdų patikros.

## Kiekvieną versiją pataisyti atskirai

Kai kiekvienas diegimas turi eilutę jūsų sąraše, kiekvienam seka ta pati eiga:

1. **Išsiaiškinkite atsakomybę:** pataisa ateina iš distribucijos, skydelio, trečiosios šalies šaltinio ar iš jūsų pačių?
2. **Įvertinkite būseną:** oficiali ištaisyta versija, patvirtintas atgalinis perkėlimas, neaišku ar atvira.
3. **Atnaujinkite:** atitinkamo šaltinio keliu, o ne kitu.
4. **Paleiskite iš naujo:** šios versijos tarnybą, ne tik pagrindinę tarnybą. Esant mod_php žiniatinklio serverį. Išsami informacija puslapyje [PHP-FPM ir visų darbinių procesų paleidimas iš naujo](https://phpsos.de/lt/php2shell/php-fpm-neustart/).
5. **Patikrinkite:** palyginkite procesų paleidimo laiką su atnaujinimo laiku.
6. **Dokumentuokite:** versiją, paketo būseną, įrodymą, paleidimo iš naujo laiką.

Versijoms, kurioms pataisos nėra, iki migracijos galioja php.net pereinamosios priemonės. Taikykite jas kiekvienai versijai atskirai, nes kiekvienas diegimas turi savo php.ini ir savo baseinus.

> **Svarbu:**
> Nepamirškite komandinės eilutės. Cron užduotys ir skriptai dažnai veikia su kita PHP versija nei svetainė. Ir ši versija turi būti ištaisytos būsenos, net jei ji neapdoroja žiniatinklio užklausų.

## Kokią versiją naudoja komandinė eilutė, o kokią konteineris?

Dvi sritys paieškos metu ypač dažnai praslysta pro tinklą. Pirmoji yra komandinė eilutė. Debian ir Ubuntu sistemose alternatyvų sistema nustato, kuris vykdomasis failas slypi už komandos `php`. `update-alternatives --display php` parodo, kurios versijos užregistruotos ir kuri šiuo metu galioja. Cron užduotys, kurios kreipiasi fiksuotu keliu, pavyzdžiui, `/usr/bin/php7.4`, šį nustatymą aplenkia. Todėl verta pažvelgti į visų naudotojų crontab failus ir į skydelių, kurie patys kuria cron užduotis, konfigūraciją.

Antroji sritis yra konteineriai. Docker konteineris serveryje atsineša savo PHP versiją, kurios nėra jokiame pagrindinio kompiuterio paketų sąraše. `docker ps` parodo veikiančius konteinerius; ar jame yra PHP ir kokios versijos, išduoda žvilgsnis į atvaizdą arba `php -v` konteineryje. Pataisa ten atliekama ne pagrindiniame kompiuteryje, o perkuriant atvaizdą ir pakeičiant konteinerį.

## Mažiau yra saugiau

Geriausia patikra yra ta, kurios nereikia daryti. Kiekviena įdiegta PHP versija padvigubina darbą kitam pažeidžiamumui. Todėl po PHP2Shell verta taikyti aiškią taisyklę: kiekviena serverio versija turi turėti paskirtį ir atsakingą asmenį. Kas jų neturi, pirmiausia išjungiama, o po stebėjimo laikotarpio pašalinama. Daugiau straipsnyje [Senų PHP versijų išjungimas hostingo valdymo skydelyje](https://phpsos.de/lt/blog/alte-php-versionen-abschalten/).

## Kaip PHP SOS padeda konkrečiai?

- Jūsų serveriams sudarome išsamų visų PHP diegimų sąrašą iš paketų, failų, procesų ir konteinerių.
- Kiekvienai versijai išsiaiškiname kilmę, atsakomybę ir pataisų būseną.
- Pagal [PHP pataisų paslaugą](https://phpsos.de/lt/leistungen/php-patch-service/) atnaujiname kiekvieną versiją, paleidžiame kiekvieną tarnybą iš naujo ir įrodome būseną.
- Kartu su jumis nustatome, kurios versijos lieka, o likusias kontroliuojamai pašaliname.


## Dažni klausimai

**Kodėl mano serveryje veikia kelios PHP versijos?**  
Dažnos priežastys: hostingo valdymo skydeliai, pateikiantys savo PHP kūrinius, trečiųjų šalių šaltiniai, tokie kaip sury.org ar Remi, skirti naujesnėms versijoms, ir senesnės programos, kurioms reikia tam tikros versijos. Dažnai dar prisideda operacinės sistemos PHP versija.

**Ar pavojinga PHP versija, kurios nenaudoja jokia svetainė?**  
Kol ji įdiegta ir veikia kaip tarnyba, ji gali būti pasiekiama, pavyzdžiui, per bandomąjį domeną, užmirštą baseiną ar cron užduotį. Be to, vėliau ji gali būti netyčia priskirta svetainei. Nereikalingas versijas reikėtų pašalinti.

**Kaip rasti visus PHP diegimus Linux serveryje?**  
Derinkite tris žvilgsnius: įdiegtus paketus, vykdomuosius PHP failus failų sistemoje ir veikiančius procesus. Tik kai visi trys parodo tą patį vaizdą, sąrašas yra išsamus.

**Ar po atnaujinimo kiekvieną versiją reikia paleisti iš naujo atskirai?**  
Taip. Kiekviena versija paprastai turi savo FPM tarnybą, LiteSpeed turi savo lsphp procesus, mod_php gyvena Apache procese. Pagrindinės tarnybos paleidimas iš naujo kitų neatnaujina.

## Šaltiniai

- [php.net: saugumo pranešimai](https://www.php.net/)
- [php.net: palaikomos versijos](https://www.php.net/supported-versions.php)
- [Red Hat Security Bulletin RHSB-2026-013](https://access.redhat.com/security/vulnerabilities/RHSB-2026-013)
