Выбор версии PHP критичен для совместимости CMS и производительности. Разные проекты требуют разных версий: то, что оптимально для нового Laravel-приложения, может полностью сломать пятилетний сайт на самописном движке.
Как выбрать версию PHP под проект
| Проект | Рекомендуемая версия | Минимальная версия |
|---|---|---|
| WordPress 6.x | 8.2 | 7.4 |
| Laravel 11 | 8.2 | 8.2 |
| Laravel 10 | 8.2 | 8.1 |
| Joomla 5 | 8.1 | 8.1 |
«Минимальная версия» — это порог, ниже которого фреймворк или CMS формально не запустится или откажет в установке. «Рекомендуемая» — версия с лучшим балансом скорости и совместимости плагинов на момент актуальности статьи; для конкретного сайта стоит свериться с требованиями используемых плагинов отдельно. Если версия PHP на сервере ниже минимальной, современный Laravel-проект даже не запустит установку зависимостей — Composer сразу остановится с понятным сообщением:
Problem 1
- Root composer.json requires php ^8.2 but your php version (7.4.33) does not
satisfy that requirement.
Это не ошибка конфигурации проекта, а прямое требование фреймворка — решается только переключением версии PHP на сервере, а не правкой composer.json в обход проверки.
Переключение версии PHP в cPanel
- cPanel → Программное обеспечение → Выбор версии PHP
- Выберите версию (рекомендуем PHP 8.2)
- Нажмите Установить как текущее
- Проверьте совместимость плагинов/тем
Разные версии PHP для разных доменов
В cPanel можно назначить отдельную версию PHP для каждого домена или папки:
- cPanel → MultiPHP Manager
- Выберите домен → укажите версию
Типичная ошибка при переходе на новую версию
Начиная с PHP 8.1 передача null в параметр функции, который не объявлен nullable, стала выдавать предупреждение об устаревании, а во многих встроенных функциях PHP 8.2+ — фатальную ошибку:
Fatal error: Uncaught TypeError: trim(): Argument #1 ($string) must be of type
string, null given, called in /home/user/public_html/wp-content/plugins/old/init.php
on line 34
Это одна из самых частых причин, по которым старые плагины WordPress ломаются именно на PHP 8.2, а не раньше: код годами передавал в trim(), strlen() или htmlspecialchars() результат, который иногда мог оказаться null (например, несуществующее поле из базы данных), и раньше PHP молча превращал его в пустую строку. Исправление — обновить плагин до версии, где автор добавил явную проверку на null перед вызовом функции.
Настройка PHP расширений
cPanel → Выбор версии PHP → Расширения:
- Для WordPress:
mysqli,gd,curl,mbstring,xml,zip - Для Laravel:
pdo_mysql,bcmath,tokenizer,fileinfo - Для интернет-магазинов (WooCommerce, PrestaShop): дополнительно
intlиsoapдля работы со службами доставки и валютами - Для API-интеграций:
curlиopensslобязательны для HTTPS-запросов к внешним сервисам
Настройка php.ini через cPanel
# cPanel → PHP Settings (или создайте .htaccess):
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value memory_limit 256M
Изменения через панель PHP Settings в cPanel применяются мгновенно, а вот при использовании файла .user.ini в качестве альтернативы стоит помнить про задержку кэширования — новые значения директив подхватываются не сразу, а с задержкой до пяти минут, за которую отвечает параметр user_ini.cache_ttl.
Когда не стоит сразу переходить на новейшую версию
- Сайт использует плагины, последнее обновление которых было больше двух лет назад — риск фатальных ошибок высок, а автор может уже не поддерживать код
- Нет тестовой копии сайта — переключать версию боевого магазина или сайта с трафиком без staging-проверки рискованно
- Используется самописный код с прямыми вызовами устаревших функций (
each(),create_function(),${}внутри строк) — они физически удалены в PHP 8.x, и версия здесь не поможет, нужен рефакторинг - Хостинг-провайдер ещё не обновил серверные модули (например, ionCube Loader) под новую версию PHP — тогда лицензионные защищённые скрипты просто перестанут запускаться
Проверка текущей версии
# Через SSH:
php -v
# Или создайте phpinfo.php:
<?php phpinfo(); ?>
# Удалите файл после проверки!
| Версия PHP | Статус | Рекомендуется для |
|---|---|---|
| PHP 8.3 | Актуальная | Новые проекты |
| PHP 8.2 | LTS | WordPress, Laravel |
| PHP 8.1 | Security only | Старые проекты |
| PHP 7.4 | EOL | Не рекомендуется |
PHP 7.4 не получает обновления безопасности с декабря 2022 года — эксплуатация известных уязвимостей на такой версии не будет исправлена никогда, и хостинг-провайдер не несёт ответственности за последствия. Даже если сайт на PHP 7.4 сейчас работает без видимых проблем, это не признак безопасности — это признак того, что уязвимость ещё не была найдена и использована именно против вашего сервера. Подробнее об ошибках после смены версии и работе с error_log — в статье логи ошибок в cPanel, а про сам механизм PHP Selector — в статье cPanel PHP Selector.