В современном веб-разработке и поддержке сайтов на WordPress часто возникает необходимость запускать разные проекты на одном сервере, при этом используя разные версии PHP. Это может быть связано с требованиями плагинов, тем или с целью тестирования новых версий без риска для рабочих сайтов.
Почему важно использовать разные версии PHP для сайтов на одном сервере
WordPress и его плагины постоянно развиваются, и некоторые из них могут требовать более новых версий PHP для корректной работы. В то же время, старые сайты могут быть несовместимы с новыми версиями PHP из-за устаревших функций. Использование одной версии PHP для всех сайтов на сервере может привести к проблемам с совместимостью, ошибкам и даже недоступности сайта.
Поэтому умение запускать разные сайты на разных версиях PHP позволяет обеспечить стабильность и безопасность каждого проекта.
Основные методы установки и переключения версий PHP на одном сервере
Существует несколько способов организовать работу с разными версиями PHP на одном сервере:
- Использование менеджеров версий PHP: такие как
phpenvилиphpbrew, которые позволяют устанавливать и переключаться между версиями PHP через консоль. - Конфигурация веб-сервера: Apache или Nginx могут быть настроены так, чтобы для каждого виртуального хоста использовать свою версию PHP через FastCGI или PHP-FPM.
- Использование Docker-контейнеров: каждый сайт запускается в отдельном контейнере с нужной версией PHP. Это более изолированный и современный способ.
Настройка разных версий PHP для сайтов на Apache с помощью PHP-FPM
Рассмотрим практический пример для Apache на Linux с использованием PHP-FPM. Предположим, у вас установлены PHP 7.4 и PHP 8.1.
Установка PHP-FPM для разных версий
На Ubuntu/Debian выполните:
sudo apt install php7.4-fpm php8.1-fpm
Убедитесь, что службы запущены:
sudo systemctl start php7.4-fpm
sudo systemctl start php8.1-fpm
Конфигурация виртуальных хостов Apache
Допустим, у вас есть два сайта: site1.example.com и site2.example.com, которым нужны разные версии PHP.
Для site1.example.com (PHP 7.4) конфигурация может выглядеть так:
<VirtualHost *:80>
ServerName site1.example.com
DocumentRoot /var/www/site1
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog /var/log/apache2/site1-error.log
CustomLog /var/log/apache2/site1-access.log combined
</VirtualHost>
Для site2.example.com (PHP 8.1):
<VirtualHost *:80>
ServerName site2.example.com
DocumentRoot /var/www/site2
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog /var/log/apache2/site2-error.log
CustomLog /var/log/apache2/site2-access.log combined
</VirtualHost>
После внесения изменений перезапустите Apache:
sudo systemctl reload apache2
Проверка версии PHP на сайте
Для проверки создайте в корне сайта файл phpinfo.php со следующим содержимым:
<?php
phpinfo();
?>
Откройте в браузере http://site1.example.com/phpinfo.php и http://site2.example.com/phpinfo.php — вы должны увидеть разные версии PHP.
Использование .htaccess для изменения версии PHP (ограничения)
Некоторые хостинги позволяют переключать версию PHP через .htaccess с помощью специальных директив, например:
AddHandler application/x-httpd-php74 .php
Однако этот метод зависит от настроек хостинга и не работает на всех серверах, особенно при использовании PHP-FPM.
Пример функции WordPress для проверки версии PHP и вывода предупреждения
Можно добавить в файл functions.php вашей темы или в плагин следующий код, который предупреждает администратора, если версия PHP ниже требуемой:
function wplite_check_php_version() {
if (is_admin() && version_compare(PHP_VERSION, '7.4', '<')) {
add_action('admin_notices', function() {
echo '<div class="notice notice-error">';
echo '<p>Внимание: Ваш сервер использует устаревшую версию PHP (' . PHP_VERSION . '). Рекомендуется обновить минимум до PHP 7.4 для корректной работы сайта.</p>';
echo '</div>';
});
}
}
add_action('init', 'wplite_check_php_version');
Рекомендации по использованию плагинов для управления версиями PHP
Хотя основная настройка версии PHP происходит на уровне сервера, существуют плагины, которые помогают выявлять проблемы совместимости, например:
- Clearfy Pro — позволяет оптимизировать и обезопасить сайт, а также отследить несовместимости с версией PHP.
- WPRemark — помогает анализировать логи и ошибки, связанные с версией PHP.
Итог: правильная настройка разных версий PHP для сайтов на одном сервере — важный навык для разработчика и администратора WordPress. Такой подход позволяет обеспечить максимальную совместимость, безопасность и производительность ваших проектов.