Вышло срочное обновление PHP с исправлением двух уязвимостей. Как обновить

Omut
Обновлено 15 октября 2026 г.4 мин чтения

Разные версии PHP для разных сайтов на локальной машине

Старое ядро Битрикса требует PHP 7.4, новый портал — 8.2. Как развести версии по сайтам через пулы PHP-FPM, что для этого нужно на macOS и Linux и что ломается после переключения.

Кирилл Новожилов

автор Omut, BXMax
PHP1С-БитриксОкружение
Omut
Старый сайт на PHP 7.4 и MySQL 5.7 рядом с сайтами на PHP 8.4 и 8.5

Ситуация знакомая почти всем, кто ведёт больше одного проекта на Битриксе: старый интернет-магазин на ядре пятилетней давности не заводится ничего выше PHP 7.4, свежий портал требует 8.2, а промо-сайт живёт где-то посередине. Локальный сервер при этом обычно умеет ровно одну версию PHP «на всё».

Разберём, как разложить версии по сайтам и что при этом ломается.

Почему глобальное переключение не годится

В OSPanel, MAMP и большинстве панелей версия PHP выбирается для всего сервера. Схема работает ровно до второго проекта: переключились на 7.4 ради старого магазина — перестал открываться портал, вернули 8.2 — магазин отвечает Parse error на первой же типизации свойств.

Ежедневное переключение туда-обратно — это ещё и перезапуск сервера, сброс opcache и потерянные сессии в админках.

Как это устроено под капотом

Технически задача решается одним способом, независимо от инструмента: поднимается несколько пулов PHP-FPM, каждый на своём сокете, а nginx направляет запрос в нужный по имени сайта.

/etc/php/7.4/fpm/pool.d/legacy.conf   → /run/php/php7.4-legacy.sock
/etc/php/8.2/fpm/pool.d/portal.conf   → /run/php/php8.2-portal.sock

В конфиге сайта:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-legacy.sock;
    include fastcgi_params;
}

Всё остальное — вопрос того, кто пишет эти конфиги: вы или программа.

Вручную на macOS

brew tap shivammathur/php
brew install shivammathur/php/php@7.4
brew install php@8.2
brew services start php@7.4
brew services start php@8.2

Дальше нужно развести пулы по сокетам, прописать fastcgi_pass в каждом серверном блоке nginx и следить, чтобы brew upgrade не переключил симлинки. Отдельная радость — PHP 7.4 на Apple Silicon: официальных сборок под ARM нет, формула ставится через Rosetta 2 либо собирается из исходников.

Вручную на Linux

Чуть проще: в Debian и Ubuntu репозиторий Ondřej Surý отдаёт версии от 5.6 до 8.4, и они спокойно живут рядом.

sudo add-apt-repository ppa:ondrej/php
sudo apt install php7.4-fpm php8.2-fpm php8.2-mysql php7.4-mysql

Пулы и сокеты всё равно настраиваются руками, зато обновления не ломают установку.

В Omut

Версия PHP выбирается на вкладке Настройки страницы сайта: 7.4 и 8.1–8.5. Сайт переходит в пул нужной версии, остальные сайты при этом продолжают работать. Рядом выбирается и версия MySQL.

Omut
Настройки сайта: версии PHP и MySQL, маршрутизация Битрикса, агенты по cron, отладка
Настройки сайта: версии PHP и MySQL, маршрутизация Битрикса, агенты по cron, отладка

Оговорка про редакции, чтобы не было сюрприза: разные версии на разных сайтах — это Pro. В бесплатной версии доступна одна версия PHP по умолчанию, общая для новых сайтов; уже выбранные версии у существующих сайтов сохраняются, но сменить их нельзя. Подробности — в Настройках и на странице Free и Pro.

PHP 7.4 на Apple Silicon работает через Rosetta 2: сборок 7.4 под ARM нет. Если Rosetta на маке не установлена, Omut предложит поставить её сам. Помните, что это трансляция, а не нативный код.

Omut
Старый сайт на PHP 7.4 и MySQL 5.7 рядом с сайтами на PHP 8.4 и 8.5
Старый сайт на PHP 7.4 и MySQL 5.7 рядом с сайтами на PHP 8.4 и 8.5

Что ломается при смене версии

Переключить версию мало — Битрикс это заметит.

Расширения. Каждая версия PHP имеет свой набор скомпилированных модулей. После переключения проверьте mbstring, mysqli, gd, zip, opcache, а для Битрикс24 — sockets и pcntl. Быстрая проверка: php -m в терминале сайта или bitrix_server_test.php из дистрибутива.

Кэш Битрикса. Скомпилированные шаблоны и managed cache остаются от прошлой версии и дают странные ошибки. После смены — очистите кэш через админку или инструменты окружения.

opcache. Держит скомпилированный байт-код прошлой версии до перезапуска пула. Если после переключения страница отдаёт старый код — дело почти всегда в нём.

Свой php.ini на версию. Лимиты не переезжают автоматически: подняли memory_limit на 8.2 — на 7.4 он остался прежним. Для админки Битрикса критичны memory_limit от 256M и max_input_vars от 10000. В Omut у каждой версии свой php.ini, он открывается из «Окружение» → «Где что лежит», и ваши правки в нём переживают перезапуск и обновления.

Старые ядра и 8.x. Битрикс до 20.х массово ловит Deprecated на PHP 8: неявные приведения типов, strlen(null), динамические свойства. Формально сайт работает, но лог заполняется, а E_DEPRECATED в выводе ломает вёрстку и AJAX. Либо обновляйте ядро, либо оставляйте такой проект на 7.4.

Как проверить, что версия применилась

Не полагайтесь на надпись в интерфейсе — проверьте со стороны сайта:

  1. Положите в корень файл с <?php phpinfo(); и откройте его в браузере — он покажет версию именно того пула, который обслуживает этот домен.
  2. Или выполните php -v в терминале сайта, если инструмент даёт терминал в контексте проекта.
  3. Удалите файл phpinfo после проверки — даже на локальной машине.

Разница важна: php -v в системном шелле показывает версию CLI, а сайт обслуживает PHP-FPM, и это могут быть разные версии.

Ещё по теме