Обновление до PHP 7 на CentOS 7

Введение

Версия PHP 7, выпущенная 3 декабря 2015 года, обещает значительное увеличение скорости работы по сравнению с предыдущими версиями этого языка, а также новые функции (например, подсказки скалярного типа). В этом руководстве объясняется, как быстро обновить PHP 5.x (любую версию), работающую на веб-сервере Apache или Nginx, до PHP 7 при помощи пакетов, предоставляемых сообществом разработчиков.

Внимание: Как и в большинстве случаев с выпуском новой версии языка, лучше немного подождать, прежде чем обновляться до PHP 7 в производстве. За это время можно протестировать свои приложения на совместимость с новой версией, выполнить тесты производительности и ознакомиться с новыми функциями языка.

Если для управления базами данных у вас установлен phpMyAdmin, мы настоятельно рекомендуем вам подождать официальных пакетов PHP 7 для CentOS, поскольку пакеты phpMyAdmin пока не поддерживают такое обновление. Если у вас работают другие сервисы или приложения с активными пользователями, то лучше сначала провести тестирование.

Необходимые условия

Для целей этого руководства предполагается, что вы используете PHP 5.x на CentOS 7, используя либо mod_php вместе с Apache, либо PHP-FPM вместе с Nginx. Также предполагается, что для выполнения административных задач у вас имеется конфигурированный пользователь non-root с привилегиями sudo.

Процесс установки PHP 5 описан в следующих руководствах:

  • Как установить стек Linux, Apache, MySQL, PHP (LAMP) на CentOS 7
  • Как установить стек Linux, Nginx, MySQL, PHP (LEMP) на CentOS 7

Подписка на хранилище сообщества IUS

Поскольку PHP 7.x пока не доступен в официальных хранилищах для массового распространения, мы будем использовать сторонний источник. Файлы PHP 7 RPM доступны в нескольких хранилищах. Мы воспользуемся хранилищем IUS.

IUS предлагает сценарий установки для подписки на их хранилище и импортирования соответствующих ключей GPG. Убедитесь, что вы находитесь в своем домашнем каталоге, и извлеките сценарий при помощи curl:

cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

Выполните сценарий:

sudo bash setup-ius.sh

Обновление mod_php для системы с Apache

В этом разделе описан процесс обновления для системы, использующей Apache в качестве веб-сервера и mod_php для выполнения PHP-кода. Если же вы используете Nginx и PHP-FPM, сразу переходите к следующему разделу.

Удалите существующие пакеты PHP. При появлении на экране запроса нажмите y и затем Enter,чтобы продолжить.

sudo yum remove php-cli mod_php php-common

Установите новые пакеты PHP 7 из IUS. При появлении запроса снова нажмите y и затем Enter.

sudo yum install mod_php70u php70u-cli php70u-mysqlnd

И наконец, перезапустите Apache, чтобы загрузить новую версию mod_php:

sudo apachectl restart

При помощи systemctl вы можете проверить статус Apache, который управляется компонентом httpd systemd:

systemctl status httpd
systemctl status httpd

Обновление PHP-FPM для системы с Nginx

В этом разделе описывается процесс обновления для системы, использующей Nginx в качестве веб-сервера и PHP-FPM для выполнения PHP-кода. Если вы уже обновили систему, работающую с Apache, сразу переходите в разделу «Тестирование PHP».

Удалите существуюищие пакеты PHP. При появлении на экране запроса нажмите y и затем Enter, чтобы продолжить.

sudo yum remove php-fpm php-cli php-common

Установите новые пакеты PHP 7 из IUS. При появлении на экране запроса снова нажмите y и Enter.

sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

По завершении установки вам нужно будет внести несколько изменений в конфигурации PHP-FPM и Nginx. Согласно конфигурации, PHP-FPM перехватывает соединения на локальном TCP-сокете, а Nginx ожидает доменный сокет Unix, который показывает путь в файловой системе.

PHP-FPM может работать с множественными пулами дочерных процессов. Согласно конфигурации, он предоставляет единственный пул под названием www, который задан в /etc/php-fpm.d/www.conf. Откройте этот файл при помощи nano (или другого текстового редактора):

sudo nano /etc/php-fpm.d/www.conf

Найдите блок, содержащий listen = 127.0.0.1:9000, который приказывает PHP-FPM перехватывать на адресе возвратной петли, порт 9000. Закомментируйте эту строку при помощи точки с запятой и раскомметируйте listen = /run/php-fpm/www.sock несколькими строками ниже.

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

Теперь найдите блок, содержащий значения listen.acl_users, и раскомментируйте listen.acl_users = nginx:

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

Выйдите и сохраните файл. В nano вы можете сделать это путем нажатия на Ctrl-X для выхода, y для подтверждения, и Enter для подтверждения перезаписываемого имени файла.

Затем убедитесь, что Nginx использует верный путь к сокету для работы с файлами PHP. Для начала откройте /etc/nginx/conf.d/default.conf:

sudo nano /etc/nginx/conf.d/php-fpm.conf

php-fpm.conf задает upstream-код, на который могут ссылаться другие конфигурационные директивы Nginx.

Внутри upstream-блока используйте #, чтобы закомментировать server 127.0.0.1:9000;, и раскомментируйте server unix:/run/php-fpm/www.sock;:

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

Выйдите и сохраните файл, затем откройте /etc/nginx/conf.d/default.conf:

sudo nano /etc/nginx/conf.d/default.conf

Найдите блок, начинающийся с location ~ \.php$ {. В этом блоке найдите каталог fastcgi_pass. Закомментируйте или удалите эту строку и замените ее на fastcgi_pass php-fpm, который будет ссылаться на upstream-код, заданный в php-fpm.conf:

  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }

Выйдите и сохраните файл, затем перезапустите PHP-FPM и Nginx, чтобы новые конфигурационные директивы вступили в силу:

sudo systemctl restart php-fpm
sudo systemctl restart nginx

Вы можете проверить статус каждой службы при помощи systemctl:

systemctl status php-fpm
systemctl status nginx

Тестирование PHP

Теперь, когда веб-сервер конфигурирован и новые пакеты установлены, мы должны убедиться, что PHP работает. Начните с проверки установленной версии PHP в командной строке:

php -v

Output
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

Вы также можете создать тестовый файл в корне документа веб-сервера. Несмотря на то, что его расположение зависит от конфигурации вашего сервера, корень документа обычно находится в одном из этих каталогов:

• /var/www/html
• /var/www/
• /usr/share/nginx/html

При помощи nano откройте новый файл под названием info.php в корне документа. По умолчанию, на Apache это будет выглядеть следующим образом:

sudo nano /var/www/html/info.php

На Nginx можно использовать следующее:

• sudo nano /usr/share/nginx/html/info.php

Вставьте следующий код:

<?php
phpinfo();

Выйдите из редактора, сохранив info.php. Теперь введите в своем браузере следующий адрес:

http://server_domain_name_or_IP/info.php

Вы увидите информационную страницы PHP 7, на которой представлена текущая версия и конфигурация. Проверив этот момент, удалите info.php:

sudo rm /var/www/html/info.php

Теперь вы убедились, что PHP 7 работает. Далее вы можете ознакомиться с постом Эрики Хайди «Подготовка к PHP 7», а также с официальным руководством по переходу от более ранних версий PHP к более поздним.

Комментарии

0