X

Ubuntu: Как установить PHP 7.4 в Ubuntu 19.04/18.04/16.04

Завтра, 28 ноября, планируется релиз PHP 7.4 поэтому сегодня я расскажу как установить данную версию PHP в Ubuntu 19.04/18.04/16.04 ..

https://wiki.php.net/todo/php74

Шаг 1. Добавление PPA репозитория

Добавляем всем известный репозиторий ppa:ondrej/php который содержит все актуальные версии PHP

sudo apt-get update
sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

Шаг 2. Установка PHP 7.4 в Ubuntu 19.04/18.04/16.04

Установка PHP 7.4 в Ubuntu 19.04/18.04/16.04 выполняется командой

sudo apt -y install php7.4

Проверяем установленную версию

$ php -v

PHP 7.4.0RC6 (cli) (built: Nov 19 2019 18:13:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.0RC6, Copyright (c), by Zend Technologies

Шаг 3. Установка модулей PHP 7.4 в Ubuntu 19.04/18.04/16.04

Для поиска доступных модулей PHP7.4 выполняем

apt-cache search php7.4

получим список доступных для установки пакетов

php-amqp - AMQP extension for PHP
php-apcu - APC User Cache for PHP
php-gearman - PHP wrapper to libgearman
php-geoip - GeoIP module for PHP
php-gmagick - Provides a wrapper to the GraphicsMagick library
php-gnupg - PHP wrapper around the gpgme library
php-imagick - Provides a wrapper to the ImageMagick library
php-memcache - memcache extension module for PHP
php-mongodb - MongoDB driver for PHP
php-oauth - OAuth 1.0 consumer and provider extension
php-pinba - Pinba module for PHP
php-propro - propro module for PHP
php-radius - radius client library for PHP
php-raphf - raphf module for PHP
php-rrd - PHP bindings to rrd tool system
php-smbclient - PHP wrapper for libsmbclient
php-solr - PHP extension for communicating with Apache Solr server
php-ssh2 - Bindings for the libssh2 library
php-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP
php-tideways - Tideways PHP Profiler Extension
php-uploadprogress - file upload progress tracking extension for PHP
php-uuid - PHP UUID extension
php-yac - YAC (Yet Another Cache) for PHP
php-yaml - YAML-1.1 parser and emitter for PHP
php-zmq - ZeroMQ messaging bindings for PHP
libapache2-mod-php7.4 - server-side, HTML-embedded scripting language (Apache 2 module)
libphp7.4-embed - HTML-embedded scripting language (Embedded SAPI library)
php-lua - PHP Embedded lua interpreter
php-pcov - Code coverage driver
php-xdebug - Xdebug Module for PHP
php7.4 - server-side, HTML-embedded scripting language (metapackage)
php7.4-bcmath - Bcmath module for PHP
php7.4-bz2 - bzip2 module for PHP
php7.4-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.4-cli - command-line interpreter for the PHP scripting language
php7.4-common - documentation, examples and common module for PHP
php7.4-curl - CURL module for PHP
php7.4-dba - DBA module for PHP
php7.4-dev - Files for PHP7.4 module development
php7.4-enchant - Enchant module for PHP
php7.4-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.4-gd - GD module for PHP
php7.4-gmp - GMP module for PHP
php7.4-imap - IMAP module for PHP
php7.4-interbase - Interbase module for PHP
php7.4-intl - Internationalisation module for PHP
php7.4-json - JSON module for PHP
php7.4-ldap - LDAP module for PHP
php7.4-mbstring - MBSTRING module for PHP
php7.4-mysql - MySQL module for PHP
php7.4-odbc - ODBC module for PHP
php7.4-opcache - Zend OpCache module for PHP
php7.4-pgsql - PostgreSQL module for PHP
php7.4-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.4-pspell - pspell module for PHP
php7.4-readline - readline module for PHP
php7.4-snmp - SNMP module for PHP
php7.4-soap - SOAP module for PHP
php7.4-sqlite3 - SQLite3 module for PHP
php7.4-sybase - Sybase module for PHP
php7.4-tidy - tidy module for PHP
php7.4-xml - DOM, SimpleXML, XML, and XSL module for PHP
php7.4-xmlrpc - XMLRPC-EPI module for PHP
php7.4-xsl - XSL module for PHP (dummy)
php7.4-zip - Zip module for PHP

устанавливаем нужные, в моем случае это

apt-get install php7.4 \
php7.4-bcmath \
php7.4-bz2 \
php7.4-cli \
php7.4-common \
php7.4-curl \
php7.4-fpm \
php7.4-gd \
php7.4-imap \
php7.4-intl \
php7.4-json \
php7.4-mbstring \
php7.4-mysql \
php7.4-opcache \
php7.4-pgsql \
php7.4-readline \
php7.4-sqlite3 \
php7.4-tidy \
php7.4-xml \
php7.4-zip \
php-amqp \
php-apcu \
php-geoip \
php-imagick \
php-memcache \
php-mongodb \
php-oauth \
php-smbclient \
php-solr \
php-ssh2 \
php-uploadprogress \
php-uuid \
php-yaml \
php-xdebug

Если нужен php-gearman, тогда инсталим его так

sudo add-apt-repository ppa:ondrej/pkg-gearman -y
sudo apt-get install php-gearman

Шаг 4. Подключение PHP 7.4 к Nginx в Ubuntu 19.04/18.04/16.04

Проверяем, что php-fpm запущен

systemctl status php7.4-fpm

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-11-27 10:03:11 CET; 19min ago
     Docs: man:php-fpm7.4(8)
 Main PID: 3522 (php-fpm7.4)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 2299)
   CGroup: /system.slice/php7.4-fpm.service
           ├─3522 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
           ├─3538 php-fpm: pool www
           └─3541 php-fpm: pool www

Nov 27 10:03:11 c2hz systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Nov 27 10:03:11 c2hz systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

Если не запущен, запускаем

systemctl start php7.4-fpm

при необходимости, добавляем в авто загрузку

systemctl is-enabled php7.4-fpm
systemctl enable php7.4-fpm

Устанавливаем nginx, если не сделали это ранее

sudo apt-get install nginx

Создаем файл конфигурации нашего домена  с таким содержимым (тут и далее mydomain.tld, надо заменить на имя вашего домена)

sudo touch /etc/nginx/sites-available/mydomain.tld.conf
sudo ln -s /etc/nginx/sites-available/mydomain.tld.conf /etc/nginx/sites-enabled/mydomain.tld.conf
sudo nano /etc/nginx/sites-available/mydomain.tld.conf
server {
    listen 80;
    server_name mydomain.tld;
    root /var/www/mydomain.tld;

    error_log /var/logs/nginx/error-mydomain.tld.log;

    location / {
        index index.php;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        include fastcgi.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

тут мы используем сокет /run/php/php7.4-fpm.sock, который указан в конфигруации пулов PHP, в этом файле: /etc/php/7.4/fpm/pool.d/www.conf

; The address on which to accept FastCGI requests.
listen = /run/php/php7.4-fpm.sock

Создаем директорию сайта и помещаем туда файл php

sudo mkdir -p /var/www/mydomain.tld
sudo printf "<?php\nphpinfo();" > /var/www/mydomain.tld/index.php;
sudo chown -R www-data:www-data /var/www/mydomain.tld

Проверяем конфигурацию nginx

sudo nginx -t

и если все ок, перезапускаем его

sudo nginx -s reload

Можно проверять настройки, перейдя по имени домена в барузере.

Шаг 5. Пример скрипта для теста PHP7.4

<?php

    print_r(array_map(fn($x) => $x+1, [0,0,0,0]));

    try {
        (string) new class {
            public function __toString(){
                throw new \Exception('Something went wrong');
            }
        };
    } catch (\Throwable $t) {
        echo 'Error: '.$t->getMessage().PHP_EOL;
    }

запускаем и видим в действии стрелочные функции и exception-ы из __toString

php test-php7.4.php 

Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
)
Error: Something went wrong

Заключение

Как видите, переход к использованию PHP 7.4 не такой уж и страшный и не займет много времени.

Категории: PHP
Тэги: nginxphp7.4ubuntu