Aktualizácia PHP na verziu 8.3
Cieľ
Chcem aktualizovať PHP na najnovšiu dostupnú verziu na počítači s operačným systémom z rodiny Debian.
PHP je populárny, obľúbený a silný programovací jazyk. Pred par dnami (25. november 2023) sa skončila aktívna podpora pre PHP verziu 8.1, oficiálne už bude dostávať len bezpečnostné opravy. Aktívna podpora je pre verzie 8.2 (do 8.12.2024) a 8.3 (do 23.11.2025). Predposledný Debian 11 má predvolenú verziu 7.4, Debian 12 má verziu 8.2 a Ubuntu 22.04 LTS má PHP verziu 8.1, ja by som chcel však inštalovať / aktualizovať na najnovšiu dostupnú verziu PHP 8.3 .
Upozornenie
Novšie verzie PHP prinášajú zlepšenia a zvyčajne aj opravy a zrýchlenie, no môžu tak isto odstrániť niektoré vlastnosti, alebo priniesť chyby nové. Takže prechod na novú verziu PHP môže rozbiť 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 si doinštalujem potrebné pomocné programy, ďalej podpisový kľúč k repozitáru, potom pridám Ondrejov repozitár medzi zdroje a nakoniec zdroje aktualizujem. Ak už som mal nejakú verziu PHP nainštalovanú tak s veľkou pravdepodobnosťou bude dostupných mnoho aktualizácii.
sudo apt install apt-transport-https lsb-release curl
# OpenPGP kluc ku repozitaru
curl -fsSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg
# Pridanie repa
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 už nainštalované s poslednou používanou verziou.
dpkg --get-selections | grep -i php8.2
Odpoveď bude zoznam všetkých nainštalovaných modulov pre PHP 8.2:
php8.2-cli install
php8.2-common install
php8.2-curl install
php8.2-fpm install
php8.2-opcache install
php8.2-readline install
php8.2-sqlite3 install
Podľa tohto zoznamu viem, aké moduly potrebujem / používam.
Môžem nainštalovať všetky požadované moduly aj s novou verziou v jednom kroku:
sudo apt install $(dpkg --get-selections | grep -i php8.2 | cut -f1 | xargs | sed 's/8.2/8.3/g')
Správnosť inštalácie si overím pomocou php -v
, predvolená CLI odpovie číslom verzie:
PHP 8.3.0 (cli) (built: Nov 25 2023 14:38:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies
with Zend OPcache v8.3.0, Copyright (c), by Zend Technologies
Ak mám nainštalovaných viacero verzii PHP, predvolenú verziu môžem zmeniť podľa potreby pomocou:
sudo update-alternatives --config php
Odpoveďou je zoznam nainštalovaných verzii, z ktorých je možné jednu vybrať.
PHP a systemd
Z PHP ma najviac zaujíma modul php-fpm
– „The PHP 8.3 FastCGI Process Manager“ a ten je v Debiane spúšťaný a riadený pomocou systemd
- démona pre správu systému.
Môžem zobraziť zoznam všetkých spustených php-fpm
:
ss -x -a | grep fpm
PHP-FPM smie byt spustené v rôznych verziách súčasne:
u_str LISTEN 0 4096 /run/php/php8.3-fpm.sock 3308708
u_str LISTEN 0 511 /run/php/php8.1-fpm.sock 2340209
u_str LISTEN 0 4096 /run/php/php8.2-fpm.sock 2340231
Ďalej môžem skontrolovať stav novo nainštalovanej verzie:
systemctl status php8.3-fpm.service
Staršie verzie môžem zastaviť a vypnúť:
sudo systemctl stop php8.1-fpm.service
sudo systemctl disable php8.1-fpm.service
Analogicky môžem opätovne uviesť do prevádzky takto zastavené php-fpm
:
sudo systemctl enable php8.1-fpm.service
sudo systemctl start php8.1-fpm.service
Poznámky
listen.owner / user
V prípade, že webový server, ktorý používa php-fpm
beží pod iným ako zvyčajne používaným užívateľom (www-data) je potrebné buď zmeniť užívateľa webového serveru na www-data
alebo upraviť konfiguračný súbor PHP-FPM. Na úpravu konfigurácie potrebujem administrátorsky prístup.
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
Aby server mohol vôbec vykonávať PHP skripty, zmením prednastavenú hodnotu používateľa unixového socketu z www-data
na meno užívateľa pod ktorým beží webový server. Zmenu vykonám na riadku, ktorý začína s listen.owner
.
listen.owner = webserver_user_name
Taktiež zmením prednastavenú hodnotu používateľa FPM procesu z www-data
na meno užívateľa, ktorý má právo zapisovať do databázy. Zmenu vykonám na riadku, ktorý začína so slovom user
.
user = db_user_name
Po akejkoľvek úprave, zmene v konfiguračných súboroch PHP (napr. /etc/php/8.3/fpm/pool.d/www.conf
) je potrebné službu reštartovať. Zmeny vykonané v konfiguračných súboroch sa prejavia až po reštarte.
sudo systemctl restart php8.3-fpm
Časové pásmo
V prípade ak potrebujem zmeniť predvolene časové pásmo, od komentujem riadok s date.time
v konfiguračnom súbore php.ini
a doplním za znamienko rovná sa požadované časové pásmo. Potom službu znova spustím s novým nastavením.
sudo vi /etc/php/8.3/fpm/php.ini
# komentar zrusim zmazanim znaku bodkociarka zo zaciatku riadku
date.timezone = Europe/Berlin
# znovu nacitanie konfiguracneho suboru
sudo systemctl reload php8.3-fpm.service