Смена версии PHP для WordPress: инструкции и примеры кода
Обновление версии PHP для сайтов на WordPress
Устаревшая версия PHP замедляет работу сайта и создаёт уязвимости. Ниже описаны несколько способов перехода на новую версию. Каждый метод имеет свои цели и подходит для разных ситуаций.
Как обновить PHP через панель управления хостингом (cPanel)?
Цель:
Быстрое и безопасное переключение PHP на большинстве виртуальных хостингов. Подходит для пользователей без доступа к командной строке.
- Войти в cPanel и найти раздел "Software" или "Дополнительно".
- Выбрать "Select PHP Version" (или "MultiPHP Manager").
- Из выпадающего списка выбрать целевую версию (например, 8.1 или 8.2).
- Сохранить изменения. Веб-сервер начнёт использовать новую версию.
Инструкция:
# После входа в cPanel переходим в раздел Software - Select PHP Version
# Выбираем нужную версию, например, 8.2
# Нажимаем Set as current
Php 8 request (особенности обработки запросов в php 8)
Типичные проблемы:
- Ошибка 500 Internal Server Error – несовместимость плагинов или темы. Решение: отключить все плагины, включить стандартную тему, проверить.
- Нужная версия отсутствует – обратиться в поддержку хостинга или сменить провайдера.
Как изменить версию PHP через командную строку (SSH)?
Цель:
Полный контроль над окружением. Подходит для VPS или выделенных серверов.
- Подключиться по SSH.
- Проверить текущую версию:
php -v - Если несколько версий установлены, проверить список:
update-alternatives --list php - Переключить алиас:
sudo update-alternatives --set php /usr/bin/php8.1 - Перезапустить веб-сервер:
sudo systemctl restart apache2илиsudo systemctl restart nginx
# Пример для Ubuntu с PHP 8.1 и 8.2
sudo apt update
sudo apt install php8.1 php8.1-cli php8.1-common php8.1-mysql
sudo update-alternatives --set php /usr/bin/php8.1
sudo systemctl restart apache2
Php 8.4 windows (php 8.4 на windows)
$ php -v PHP 8.1.25 (cli) (built: ... )
Php 7 функции (новые функции php 7)
Типичные ошибки:
- Команда sudo не найдена – выполнять от root или настроить sudo.
- После переключения сайт выдаёт ошибку о нехватке модулей – установить недостающие расширения (php8.1-mbstring, php8.1-xml и т.д.).
Как установить конкретную версию PHP через .htaccess?
Цель:
Изменение PHP только для конкретной папки или домена без доступа к глобальным настройкам. Работает на серверах Apache с mod_suexec или FastCGI.
# В корневой папке сайта добавить в .htaccess:
AddHandler application/x-httpd-php8.1 .php
обновление php wordpress (обновление версии php для wordpress)
Пояснение:
Указанная директива заставляет Apache обрабатывать .php файлы с помощью PHP 8.1. Точное имя обработчика (application/x-httpd-php8.1) зависит от настроек хостинга. Его можно узнать в панели управления или у провайдера.
Проблемы:
- Обработчик не существует – сайт выдаст ошибку 500. Проверить доступные обработчики через раздел "Select PHP Version" в cPanel.
- Метод не работает на Nginx – для Nginx требуется настройка конфигурации виртуального хоста.
Как обновить PHP в Docker-контейнере для WordPress?
Цель:
Локальная разработка или изолированные окружения. Подходит для команд, использующих контейнеризацию.
# Файл docker-compose.yml (фрагмент)
services:
wordpress:
image: wordpress:php8.1-apache
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
Php 8 json (php 8: изменения в работе с json)
Инструкция:
- Заменить тег image на нужную версию (например, wordpress:php8.2-apache).
- Пересоздать контейнер:
docker-compose up -d. - Проверить версию:
docker-compose exec wordpress php -v.
$ docker-compose exec wordpress php -v PHP 8.2.12 (cli) (built: ... )
Php v 7 (php версия 7)
Возможные проблемы:
- После обновления могут отсутствовать расширения – добавить их в Dockerfile или выбрать образ с нужными расширениями.
- База данных остаётся, но данные могут быть несовместимы – предварительно сделать бэкап.
Как проверить совместимость WordPress с новой версией PHP без обновления?
Цель:
Оценить готовность сайта к переходу. Подходит для любых хостингов, особенно при использовании плагина Health Check.
# Установить и активировать плагин Health Check & Troubleshooting
# Перейти в Инструменты -> Health Check -> вкладка PHP
# Плагин покажет текущую версию PHP и предупреждения о несовместимости
Php 8 function (функции php 8)
Также можно создать файл phpinfo.php в корне WordPress:
<?php
phpinfo();
Открыть его в браузере, чтобы увидеть текущую конфигурацию PHP. После проверки удалить файл из соображений безопасности.
Примечание:
Некоторые плагины могут не поддерживать новую версию PHP. Перед обновлением рекомендуется протестировать сайт на staging-окружении.
Расширенные примеры обновления PHP для WordPress
Полный скрипт автоматического обновления PHP на сервере Ubuntu через SSH
Пример bash-скрипта
#!/bin/bash
# update_php.sh - переключение на PHP 8.2 для WordPress
set -e
sudo apt update
sudo apt install -y php8.2 php8.2-cli php8.2-common php8.2-mysql php8.2-curl php8.2-xml php8.2-mbstring php8.2-zip php8.2-gd
# Переключение алиаса
sudo update-alternatives --set php /usr/bin/php8.2
sudo update-alternatives --set phar /usr/bin/phar8.2 2>/dev/null || true
# Перезапуск веб-сервера
if systemctl is-active --quiet apache2; then
sudo systemctl restart apache2
elif systemctl is-active --quiet nginx; then
sudo systemctl restart nginx
fi
echo "PHP обновлён до версии:"
php -v
$ bash update_php.sh ... PHP 8.2.13 (cli) (built: ... )
Пояснение:
Скрипт устанавливает PHP 8.2 и все популярные расширения, необходимые для WordPress. После установки переключает глобальный алиас и перезапускает веб-сервер. Рекомендуется запускать с правами root или через sudo.
Пример настройки разных версий PHP для разных поддоменов через Nginx
Конфигурация виртуального хоста для использования PHP 8.1 и 8.2 одновременно
# /etc/nginx/sites-available/example.com
server {
listen 80;
server_name old.example.com;
root /var/www/old;
index index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
server {
listen 80;
server_name new.example.com;
root /var/www/new;
index index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}
Результат:
Поддомен old.example.com использует PHP 8.1, new.example.com – PHP 8.2. Это позволяет тестировать обновление на одном сайте, не затрагивая другой.
Пример docker-compose.yml для WordPress с PHP 8.2 и MariaDB
version: '3'
services:
db:
image: mariadb:10.11
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
wordpress:
depends_on:
- db
image: wordpress:php8.2-apache
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
db_data:
Пояснение:
Образ wordpress:php8.2-apache включает Apache и PHP 8.2 с необходимыми модулями. После запуска docker-compose up -d WordPress будет работать на PHP 8.2. Для смены версии достаточно изменить тег образа и перезапустить контейнер.
Использование WP-CLI для диагностики перед обновлением PHP
# Проверка совместимости всех плагинов с PHP 8.1 (при текущей версии 7.4)
wp plugin list --status=active --fields=name,version,update
# Проверка на наличие ошибок после смены PHP (при условии, что новая версия уже работает)
wp core verify-database
# Отображение информации о PHP
wp server --url=example.com --php_ini=/etc/php/8.1/cli/php.ini
Результат выполнения wp core verify-database:
Success: WordPress database meets requirements.
Пояснение:
WP-CLI не изменяет версию PHP, но помогает убедиться, что сайт готов к обновлению. Команда wp plugin list показывает активные плагины и их статус обновлений. После переключения PHP можно проверить целостность базы данных.