Обновление PHP 5 до PHP 7 в CentOS 7
Centos, PHP | Комментировать запись
Версия 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: Apache, CentOS 7, IUS, mod_php, NGINX, PHP 5, PHP 7, php-fpm