Поиск по сайту:

Как перейти на PHP 7 на CentOS 7


Введение

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

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

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

Предпосылки

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

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

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

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

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

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

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

Запустите скрипт:

  1. sudo bash setup-ius.sh

Обновление mod_php с помощью Apache

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

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

  1. sudo yum remove php-cli mod_php php-common

Установите новые пакеты PHP 7 из IUS. Снова нажмите y и Enter, когда будет предложено.

  1. sudo yum install mod_php70u php70u-cli php70u-mysqlnd

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

  1. sudo apachectl restart

Вы можете проверить статус Apache, которым управляет модуль httpd systemd, используя systemctl:

  1. systemctl status httpd

Обновление PHP-FPM с помощью Nginx

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

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

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

Установите новые пакеты PHP 7 из IUS. Снова нажмите y и Enter, когда будет предложено.

  1. 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 (или другого текстового редактора):

  1. 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:

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

php-fpm.conf определяет восходящий поток, на который могут ссылаться другие директивы конфигурации Nginx. Внутри восходящего блока используйте #, чтобы закомментировать server 127.0.0.1:9000;, и раскомментируйте server unix:/run/php-fpm/www .сок;:

# 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:

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

Найдите блок, начинающийся с location ~ \.php${. В этом блоке найдите директиву fastcgi_pass. Закомментируйте или удалите эту строку и замените ее на fastcgi_pass php-fpm, которая будет ссылаться на восходящий поток, определенный в 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, чтобы новые директивы конфигурации вступили в силу:

  1. sudo systemctl restart php-fpm
  2. sudo systemctl restart nginx

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

  1. systemctl status php-fpm
  2. systemctl status nginx

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

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

  1. php -v
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 это будет:

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

В Nginx вместо этого вы можете использовать:

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

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

<?php
phpinfo();

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

http://server_domain_name_or_IP/info.php

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

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

Теперь у вас есть работающая установка PHP 7. Отсюда вы можете ознакомиться с официальным руководством по миграции Эрики Хайди.