В этой статье мы покажем, как обновить версию PHP до 7.4 на web сервере с Nginx и php-fpm (на базе Ubuntu или Debian Linux). Версия PHP 7.4 содержит большое количество обновлений, позволяющих повысить стабильность, безопасность и производительность вашего веб сервера и настоятельно рекомендуется к использованию.
От имени суперпользователя добавьте свежие репозитарии и обновите списки пакетов:
$ apt-add-repository ppa:ondrej/php
$ apt-add-repository ppa:ondrej/nginx
$ apt update
Установите новые пакеты PHP и PHP-FPM:
$ apt install -y php7.4 php7.4-cli php7.4-common php7.4-fpm
Проверяем установленную версию PHP:
$ php -v
PHP 7.4.22 (cli) (built: Oct 18 2021 11:02:11) ( NTS )
Установите дополнительные библиотеки и модули для WordPress (опционально):
$ apt install -y php7.4-mysql php7.4-mysqli php7.4-dom php7.4-simplexml php7.4-ssh2 php7.4-xml php7.4-xmlreader php7.4-curl php7.4-exif php7.4-ftp php7.4-gd php7.4-iconv php7.4-imagick php7.4-json php7.4-mbstring php7.4-posix php7.4-sockets php7.4-tokenize php7.4-pdo php7.4-sqlite3 php7.4-ctype php7.4-fileinfo php7.4-zip php7.4-exif
Внесите изменения в файл /etc/php/7.4/fpm/php.ini. Уберите знак комментария у параметра cgi.fix_pathinfo и установите его равным 0.
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0
Перезапустите сервис PHP-FPM:
$ systemctl restart php7.4-fpm.service
Проверьте, что появился новый сокет:
$ ls -1 /run/php/
php-fpm.sock php7.2-fpm.pid php7.2-fpm.sock php7.4-fpm.pid php7.4-fpm.sock
Осталось поменять версию PHP-FPM в конфигурационном файле NGINX (укажите новый сокет):
$ nano /etc/nginx/sites-available/default
... location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } ...
Проверьте конфигурацию NGINX, и, если все ОК, перезапустите его.
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successfull
$ systemctl reload nginx.service