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

Версия PHP 7.0 была выпущена 3 декабря 2015 года. PHP 7 обладает существенно улучшенной скоростью и множеством других новых функций.

Это руководство поможет быстро обновить веб-сервер Apache или Nginx, работающий на любом релизе версии PHP 5.

Внимание! Запускать PHP 7 в производство сразу после обновления не рекомендуется. Сначала нужно проверить приложения на совместимость с новым релизом и ознакомиться с функциями языка.

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

Требования

Для выполнения руководства нужно иметь экземпляр PHP 5.x на сервере CentOS 7 с предустановленным модулем mod_php (для Apache) или PHP-FPM (для Nginx). Также нужна учётная запись не-root с доступом к sudo.

Установить PHP 5 можно при помощи одного из руководств:

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

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

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

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

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

sudo bash setup-ius.sh

Обновление mod_php для Apache

Этот раздел содержит инструкции по обновлению модуля mod_php для поддержки нового кода PHP.

Примечание: Если вы используете веб-сервер Nginx, переходите к следующему разделу.

Сначала удалите старые пакеты PHP:

sudo yum remove php-cli mod_php php-common

Примечание: Чтобы подтвердить запуск команды, нужно нажать y и Enter.

Установите новые пакеты PHP 7 из репозитория IUS:

sudo yum install mod_php70u php70u-cli php70u-mysqlnd

Затем перезапустите Apache, чтобы загрузит новую версию модуля mod_php:

sudo apachectl restart

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

systemctl status httpd

Обновление PHP-FPM для Nginx

Этот раздел содержит инструкции по обновлению PHP-FPM для поддержки новой версии PHP.

Сначала нужно удалить устаревшие пакеты PHP:

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

Затем установите новые пакеты из репозитория IUS.

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. Откройте этот файл в текстовом редакторе:

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, которая ссылается на файл 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 status php-fpm
systemctl status nginx

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

Теперь веб-сервер настроен, все новые пакеты установлены. Нужно убедиться, что обновление прошло успешно.

Запросите версию PHP:

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

Также можно создать тестовый файл в каталоге document root веб-сервера. В зависимости от используемого сервера и настройки это может быть один из этих каталогов:

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

Откройте новый файл info.php в каталоге document root при помощи текстового редактора. По умолчанию для Apache это каталог:

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

Для Nginx:

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

Вставьте в него такой код:

<?php
phpinfo();

Закройте редактор и сохраните файл. Откройте файл в браузере:

http://server_domain_name_or_IP/info.php

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

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

Заключение

Теперь на сервере есть готовая к работе установка PHP 7.

За дополнительной информацией обращайтесь к официальному руководству PHP 7.

Tags: , , , , , , ,

Добавить комментарий