Aktualizacja PHP do wersji 7.4

Support dla PHP https://php.net/supported-versions.php

1. Aktualizacja do PHP 7.2

W tym podpunkcie zajmiemy się aktualizacją PHP do wersji 7.4 a także zmianą IONCubeLoadera. Wersję PHP 7.4 można instalować dla Ready_™ 6.80.1 i nowszych.

Przed instalacją nowych pakietów musimy posprzątać nie potrzebne elementy w tym PHP oraz ZendLoadrera. Jeśli korzystaliśmy z PHP 5.6 lub PHP 7.2 wykonujemy poniższe polecenie dpa PHP 5.6:

apt-get purge php5 php5-common php5-dev php5-imap php5-ldap php5-odbc php5-readline php5-sybase php5-cli php5-curl php5-gd php5-json php5-memcached php5-pgsql php5-sqlite php5-xsl

Jeśli świeżo aktualizowaliśmy do Debian 9 Stretch możemy również usunąć pakiety PHP 7.0 poniższym poleceniem.

sudo apt-get remove php7.0*

Usuńmy również ręczenie pliki ZendLoadera nie będą nam już potrzebne. Pliki powinny znajdować się w lokalizacji:

/usr/lib/php5/ZendGuardLoader.so
/usr/lib/php5/opcache.so

Dla PHP 7.2:

apt-get purge php7.2*

Jeśli świeżo aktualizowaliśmy do Debian 9 Stretch możemy również usunąć pakiety PHP 7.0 poniższym poleceniem.

sudo apt-get remove php7.0*

Przystępujemy do instalacja PHP 7.4. Jeśli nie mamy jeszcze repozytoriów dla PHP 7.4 dodajemy je w przeciwnym przypadku możemy pominąć ten punkt

Debian 9 Stretch:

sudo apt install ca-certificates apt-transport-https 
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list

Debian 10 Buster

sudo apt install ca-certificates apt-transport-https 
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list

Debian 11 Buster

sudo apt install ca-certificates apt-transport-https 
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ bullseye main" | sudo tee /etc/apt/sources.list.d/php.list
apt-get update

Przystępujemy do instalacji pakietów PHP 7.4:

apt install php7.4-fpm php7.4-cli php7.4-common php7.4-curl php7.4-mbstring php7.4-mysql php7.4-xml php7.4-gd php7.4-pgsql php7.4-bcmath php7.4-sqlite3 php7.4-imap php7.4-xsl php7.4-ldap php7.4-odbc php7.4-json php7.4-sybase php7.4-readline php7.4-soap php7.4-zip

Dla FPM instalujemy REDIS zamiast memcached

apt-get install redis-server
apt-get install php7.4-redis

Konfiguracja dla Redis, którą wprowadzamy w pliku /etc/redis/redis.cont

save 1200 1
save 600 10
save 120 10000

Włączamy obsługę modułów w Apache

sudo a2enmod actions alias proxy_fcgi

Dodajemy IonCubeLoadera, plik znajduje się w paczce konfiguracyjnej tutaj. Po umieszczeniu go na serwerze np

/usr/lib/php/

Dodajemy w pierwszej linii pliku php.ini w lokalizacjach

/etc/php/7.4/fpm/php.ini
/etc/php/7.4/cli/php.ini

następujący wpis:

zend_extension=/usr/lib/php/ioncube_loader_lin_7.4.so

W plikach php.ini dodajemy również

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

oraz modyfikujemy wartości dla:

memory_limit = 512M
upload_max_filesize = 32M
post_max_size = 64M
expose_php = Off
session.name = READYSESSID
max_input_vars = 2500

Kolejnym krokiem jest modyfikacja pliku www.conf

vim /etc/php/7.4/fpm/pool.d/www.conf

modyfikujemy wpis

security.limit_extensions = .php engine
pm.max_children = 8

Ostatnim elementem jest zmiana handlera w Apache w pliku default.conf oraz default-ssl.conf, obecny wpis:

Dla PHP 5.6

<FilesMatch "(.+[.]inc$|.+[.]php$|engine)">
     SetHandler application/x-httpd-php
</FilesMatch>

Dla PHP 7.2

<FilesMatch "(.+[.]inc$|.+[.]php$|engine$)">
    SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch> 

modyfikujemy następująco

<FilesMatch "(.+[.]inc$|.+[.]php$|engine$)">
    SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch> 

W plikach konfiguracyjnych default.conf oraz default-ssl.conf Apache dodajemy również, na potrzeby autoryzacji WebDAV oraz CalDAV:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Z poziomu konsoli wykonujemy polecenie:

a2enmod headers

W plikach konfiguracyjnych conf-enabled/security.conf w Apache wprowadzamy następujące zmiany:

ServerSignature Off
Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"
Header always set Referrer-Policy "same-origin"

Uruchomienie moduł tłumaczącego dla Ready_™. Dodajemy moduł do php 7.4 - bsedt.so w lokalizacji

/usr/lib/php/20190902

Następnie tworzymy pliki bsedt.ini w folderach php:

/etc/php/7.4/mods-available/bsedt.ini

Zawartość pliki bsedt.ini

extension=bsedt.so

Tworzymy symlinki do pliku bsedt.ini

ln -s /etc/php/7.4/mods-available/bsedt.ini /etc/php/7.4/cli/conf.d/bsedt.ini
ln -s /etc/php/7.4/mods-available/bsedt.ini /etc/php/7.4/fpm/conf.d/bsedt.ini

W pliku php.ini dla /etc/php/7.4/cli/ oraz /etc/php/7.4/fpm/ dodajemy wpis:

[bsedt]
bsedt.lang_path="/home/edokumenty/public_html/apps/edokumenty/share/lang"
bsedt.lang=en_UK

Wyłączamy moduł opcache poprzez zakomentowanie w /etc/php/7.4/mods-available/opcache.ini

Po zakończeniu konfiguracji restartujemy usługi Apache oraz FPM

service php7.4-fpm restart
/etc/init.d/apache2 restart

Gotowe pliki konfiguracyjne można pobrać z poniższej lokalizacji. Po wgraniu plików wystarczy tylko restart usług Apache oraz PHP-FPM

Po zmianie PHP na 7.4 konieczna jest aktualizacja kodu system Ready_™ do kompilacji dla php 7.4. Aktualizacja kodu na nowszą wersję może wymagać wykonania patchy. Aktualizację wykonujemy w taki sam sposób jak dla systemu eDokumenty. Pomocny może być w tym przypadku ten link.