Aktualizácia PHP na verziu 7.4

Cieľ

Chcem aktualizovať PHP na najnovšiu podporovanú verziu na počítači s operačným systémom z rodiny Debian.

PHP je populárny, obľúbený a silný programovací jazyk. Momentálne (február 2020) sa pomaly končí podpora pre PHP verziu 7.2, oficialne už len bezpečnostné opravy. Aktívna podpora je pre verzie 7.3 (do 6.12.2020) a 7.4 (do 28.11.2021). Debian 9 má vo svojich repozitároch verziu 7.0 a Debian 10 má verziu 7.3, ja by som chcel však aktualizovať na najnovšiu verziu 7.4.

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 stiahnem pomocné programy, potom podpisový kľúč, potom pridám Ondrejov repozitár medzi zdroje a nakoniec zdroje zaktualizujem. 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
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb 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é dpkg --get-selections | grep -i php, odpoveď bude zoznam všetkých nainštalovaných modulov pre všetky verzie PHP:

php-common                                      install
php5-cli                                        install
php5-common                                     install
php5-fpm                                        install
php5-json                                       install
php5-readline                                   install
php5-sqlite                                     install
php7.0-cli                                      install
php7.0-common                                   install
php7.0-fpm                                      install
php7.0-json                                     install
php7.0-opcache                                  install
php7.0-readline                                 install
php7.0-sqlite3                                  install
php7.4                                          install
php7.4-cli                                      install
php7.4-common                                   install
php7.4-fpm                                      install
php7.4-json                                     install
php7.4-opcache                                  install
php7.4-readline                                 install
php7.4-sqlite3                                  install

Podľa tohto zoznamu viem, aké moduly potrebujem nainštalovať:

sudo apt install php7.4 php7.4-common php7.4-cli php7.4-fpm php7.4-json php7.4-opcache php7.4-readline php7.4-sqlite3

Správnosť inštalácie si overím pomocou php -v, predvolená CLI odpovie číslom verzie:

PHP 7.4.2 (cli) (built: Feb  2 2020 07:56:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.2, 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

PHP a systemd

Z PHP ma najviac zaujíma modul php-fpm – „The PHP 7.4 FastCGI Process Manager“ a ten je v Debiane ako aj mnoho iných služieb spúšťaný a riadený pomocou démona systemd.

V predvolenom nastavení php-fpm načúva na unixovom „sockete“. Zoznam všetkých počúvajúcich si môžem zobraziť pomocou ss :

ss -x -a | grep LISTEN

Podobne si môžem zobraziť len zoznam všetkých počúvajúcich php-fpm:

ss -x -a | grep php

Výstup na mojom testovacom Raspberry Pi ukazuje, že PHP-FPM tam beží v troch rôznych verziách:

u_str  LISTEN  0       0            /run/php/php7.0-fpm.sock 457417
u_str  LISTEN  0       0            /run/php/php7.3-fpm.sock 459851
u_str  LISTEN  0       0            /run/php/php7.4-fpm.sock 477314

Ak chcem po nainštalovaní novšej verzie PHP tú staršiu prestať používať, službu najskôr zastavím a potom ju vypnem:

sudo service php7.0-fpm stop
sudo systemctl disable php7.0-fpm.service

Analogicky môžem opätovne uviesť do prevádzky takto zastavené php-fpm:

sudo systemctl enable php7.0-fpm.service
sudo service php7.0-fpm start

Po zmene v konfiguračných súboroch je potrebné službu reštartovať:

sudo service php7.0-fpm restart

Zdroj