PHP-FPM Linux, PHP-FPM (версия уточняется)

PHP-FPM: PHP-FPM сохраняет устаревший код из-за настроек OPcache

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

После замены PHP-файлов сайт может продолжать выполнять предыдущую версию кода, если OPcache не проверяет время изменения файлов. Сначала нужно отличить кэш PHP от кэша CDN, приложения и браузера; перезапуск всех служб без диагностики способен прервать запросы и не исправить причину.

В этой статье
  1. Что происходит и когда применима инструкция
  2. Причины и диагностические признаки
  3. Подробная пошаговая инструкция
  4. Как проверить, что проблема исправлена
  5. Если не помогло — дальнейшая диагностика и откат

#Что происходит и когда применима инструкция

После замены PHP-файлов сайт может продолжать выполнять предыдущую версию кода, если OPcache не проверяет время изменения файлов. Сначала нужно отличить кэш PHP от кэша CDN, приложения и браузера; перезапуск всех служб без диагностики способен прервать запросы и не исправить причину.

#Причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Отключена проверка меток времениОтключена проверка меток времени. В FPM opcache.validate_timestamps=0 и после выкладки PHP-файла изменения не подхватываются.В FPM opcache.validate_timestamps=0 и после выкладки PHP-файла изменения не подхватываются.Согласовать управляемый сброс OPcache при развёртывании.
Проверка происходит не сразуПроверка происходит не сразу. opcache.validate_timestamps=1, но ещё не истёк opcache.revalidate_freq.opcache.validate_timestamps=1, но ещё не истёк opcache.revalidate_freq.Подождать заданный интервал или использовать штатную процедуру релиза.
Устаревший ответ отдаёт не PHPУстаревший ответ отдаёт не PHP. Статическая страница или CDN показывает старое даже после сброса PHP.Статическая страница или CDN показывает старое даже после сброса PHP.Проверить заголовки ответа и кэш приложения/прокси.

#Подробная пошаговая инструкция

  1. Сделайте контрольное изменение в тестовом маршрутеВ специально выделенном тестовом PHP-файле измените безвредную текстовую метку версии. Не вносите случайные правки в действующие сценарии оплаты, авторизации или конфигурации. Зафиксируйте размер и время изменения файла и сделайте запрос из приватного окна с отключённым кэшем браузера.
  1. Проверьте фактические параметры через веб-окружениеЗначения PHP CLI могут отличаться от FPM. В доступном только администратору диагностическом маршруте временно выведите ini_get для opcache.validate_timestamps и opcache.revalidate_freq; убедитесь в названии пула и версии. Не публикуйте phpinfo в открытом доступе и удалите диагностику после проверки.
  2. SSH, только чтение конфигурации CLI: ориентир, а не доказательство настроек FPM
    Linux · Терминал (Bash)Команда
    SSH, только чтение конфигурации CLI: ориентир, а не доказательство настроек FPM. Сверьте с веб-значениями.
    php -i | grep -Ei "opcache.validate_timestamps|opcache.revalidate_freq|opcache.enable"
  1. Различите OPcache и внешнее кэшированиеПроверьте HTTP-заголовки и наличие признаков HIT от CDN/прокси. Если HTML устарел, а метка в некэшируемом тестовом PHP уже новая, вероятнее кэш ответа. Если тестовый PHP возвращает старую метку без посредников, изучайте OPcache и маршрут к нужному каталогу релиза.
  2. В локальном терминале с curl, подставьте собственный адрес
    Linux · Терминал (Bash)Команда
    В локальном терминале с curl, подставьте собственный адрес. -I делает HEAD; некоторые приложения обрабатывают HEAD иначе, при сомнениях проверьте GET. Не вставляйте приватные токены.
    curl -sSI https://example.com/test-version.php
  1. Выберите управляемое обновление кэшаЕсли validate_timestamps=0 включён намеренно для производительности, используйте предусмотренный процессом выпуска сброс OPcache из того же FPM-пула или безопасную перезагрузку только нужной службы. opcache_reset, вызванный в CLI, обычно не сбрасывает общую память OPcache веб-процессов. Не создавайте общедоступный файл reset.php.
  1. Если включена проверка времени, изучите задержку и файловую выкладкуПри validate_timestamps=1 настройка revalidate_freq задаёт период проверки; сравните с моментом релиза. Если каталог переключается символической ссылкой, проверьте realpath_cache, сам факт переключения целевого пути и маршрутизацию document root. Не стирайте OPCache файловую память вручную без понимания своей схемы запуска.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    SSH с административными правами, пример Debian PHP 8.2: тест и согласованная перезагрузка экземпляра. На рабочем сайте операция может повлиять на активные запросы.
    sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Сравните результат до и послеПосле штатного сброса или истечения интервала повторно запросите тестовый маршрут. Новая метка должна появиться и сохраняться в новых запросах. Удалите временный файл и верните конфигурацию к принятой политике выкладки.

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

Контрольный PHP-файл отображает новую версию при запросе через тот же сайт и пул, старые HTML-ответы больше не возникают после очистки соответствующего уровня кэша.

#Если не помогло — дальнейшая диагностика и откат

Если содержание не поменялось, проверьте, что редактируется тот document root, куда действительно смотрит сайт, что нет второго сервера, контейнера или узла и что процесс выкладки не откатил файлы.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.