Aktualizácia PHP na verziu 8.5

Cieľ

Chcem aktualizovať PHP na najnovšiu dostupnú verziu v prostredí operačného systému z rodiny Debian.

PHP je populárny, obľúbený a výkonný serverový programovací jazyk. Aktívna podpora pre PHP verziu 8.4 potrvá ešte do konca roka 2026, potom už bude dostávať len bezpečnostné opravy. Posledný Debian 13 má predvolenú verziu 8.4 a Ubuntu 24.04 LTS má PHP dokonca vo verzii 8.3. Ja by som však chcel nainštalovať alebo aktualizovať systém na najnovšiu dostupnú verziu PHP 8.5 .


Upozornenie

Novšie verzie PHP prinášajú zlepšenia, opravy a zrýchlenie, no môžu tiež odstrániť niektoré vlastnosti alebo priniesť nové chyby. Prechod na novú verziu PHP môže narušiť funkčnosť systému! Na toto nesmiem zabudnúť. Pred prechodom je potrebné vyskúšať novšiu verziu na neprodukčných serveroch.


Riešenie

Najskôr nainštalujem potrebné pomocné programy, ďalej podpisový kľúč k repozitáru, potom pridám Ondrejov repozitár medzi zdroje (ak ho ešte nemám) a nakoniec zdroje aktualizujem. Ak som už mal nainštalovanú nejakú verziu PHP, s veľkou pravdepodobnosťou bude k dispozícii množstvo aktualizácií.

sudo apt install apt-transport-https lsb-release curl

# OpenPGP kľúč k repozitáru
curl -fsSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg

# Pridanie repozitára
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

sudo apt update

V ďalšom kroku si overím, aké moduly PHP som mal nainštalované v poslednej používanej verzii.

dpkg --get-selections | grep -i php8.4

Odpoveďou bude zoznam všetkých nainštalovaných modulov pre PHP 8.4:

php8.4            install
php8.4-cli        install
php8.4-common     install
php8.4-curl       install
php8.4-fpm        install
php8.4-opcache    install
php8.4-readline   install
php8.4-sqlite3    install

Podľa tohto zoznamu viem, ktoré moduly používam a potrebujem. Môžem teraz vyfiltrovať moduly dostupné v novej verzii:

dpkg --get-selections | grep -i php8.4 | cut -f1 | sed 's/8\.4/8\.5/g' | while read pkg; do
  apt-cache show "$pkg" &>/dev/null && echo "OK: $pkg" || echo "MISSING: $pkg"
done

A nainštalovať všetky požadované a dostupné moduly v jednom kroku:

dpkg --get-selections | grep -i php8.4 | cut -f1 | sed 's/8\.4/8\.5/g' | while read pkg; do
  apt-cache show "$pkg" &>/dev/null && echo "$pkg"
done | xargs sudo apt install

Správnosť inštalácie si overím pomocou php -v. Predvolené CLI vypíše číslo verzie:

PHP 8.5.4 (cli) (built: Mar 30 2026 19:28:17) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.5.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.4, Copyright (c), by Zend Technologies

Ak mám nainštalovaných viacero verzií PHP, predvolenú verziu môžem podľa potreby zmeniť pomocou:

sudo update-alternatives --config php

Výstupom je zoznam nainštalovaných verzií, z ktorých je možné si jednu vybrať.


PHP a systemd

Z PHP ma najviac zaujíma modul php8.5-fpm.service - The PHP 8.5 FastCGI Process Manager. Ten je v Debiane spúšťaný a riadený pomocou systemd – démona na správu systému.

Môžem si zobraziť zoznam všetkých spustených inštancií php-fpm:

ss -x -a | grep fpm

PHP-FPM môže byť spustené vo viacerých verziách súčasne:

u_str LISTEN 0      4096                     /run/php/php8.4-fpm.sock
u_str LISTEN 0      4096                     /run/php/php8.5-fpm.sock

Ďalej môžem skontrolovať stav novonainštalovanej verzie:

systemctl status php8.5-fpm.service

Staršie verzie môžem zastaviť a zakázať:

sudo systemctl stop php8.4-fpm.service
sudo systemctl disable php8.4-fpm.service

Analogicky môžem v prípade potreby opätovne uviesť do prevádzky takto zastavené staré php-fpm:

sudo systemctl enable php8.4-fpm.service
sudo systemctl start php8.4-fpm.service

V prípade, že nové php-fpm funguje podľa očakávaní, môžem zmeniť konfiguráciu webového servera tak, aby používal novšiu verziu PHP.


Poznámky

Prenos konfigurácie

V prípade, že mám upravené konfiguračné súbory pre PHP a som si istý, že ich môžem použiť aj v novej verzii, skopírujem ich. Pôvodné by som mal pre istotu zálohovať.

sudo cp /etc/php/8.5/fpm/php.ini /etc/php/8.5/fpm/php.ini.bck
sudo cp /etc/php/8.4/fpm/php.ini /etc/php/8.5/fpm/php.ini

sudo cp /etc/php/8.5/fpm/pool.d/www.conf /etc/php/8.5/fpm/pool.d/www.conf.bck
sudo cp /etc/php/8.4/fpm/pool.d/www.conf /etc/php/8.5/fpm/pool.d/www.conf

Po akejkoľvek úprave konfiguračných súborov PHP je potrebné službu reštartovať. Zmeny sa prejavia až po reštarte.

sudo systemctl restart php8.5-fpm

Časové pásmo

Ak potrebujem zmeniť predvolené časové pásmo, odkomentujem riadok s date.timezone v konfiguračnom súbore php.ini a za znamienko rovnosti doplním požadovanú hodnotu. Potom službu znova načítam s novým nastavením.

sudo vi /etc/php/8.5/fpm/php.ini

# Komentár zruším zmazaním bodkočiarky na začiatku riadku
date.timezone = Europe/Berlin

# Znovunačítanie konfiguračného súboru
sudo systemctl reload php8.5-fpm.service

Zdroje