wpcache.ru wordpress WPCache.ru

Как удалить старый кэш PHP OPcache в WordPress

Что такое PHP OPcache и почему важна его очистка

PHP OPcache — это механизм кэширования байткода PHP-скриптов, встроенный в PHP с версии 5.5. Он значительно ускоряет выполнение PHP-кода, храня предварительно скомпилированный байткод в памяти. Однако при обновлении файлов WordPress или плагинов OPcache может не обновиться автоматически, что приводит к загрузке устаревших версий скриптов. Это становится причиной ошибок, неожиданных сбоев и проблем с отображением сайта.

Диагностика проблемы с OPcache в WordPress

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

  • Изменения в PHP-файлах не проявляются на сайте.
  • Ошибки появляются только в продуктивной среде, но не на локальной.
  • Логи PHP показывают, что скрипты загружаются из кеша.
  • При отключении кэширования на уровне сервера проблема пропадает.

Проверка статуса OPcache

Создайте файл opcache-status.php в корне сайта с таким содержимым:

<?php
phpinfo();
?>

Откройте его в браузере и найдите блок OPcache. Проверьте, что opcache.enable и opcache.enable_cli включены, а opcache.validate_timestamps установлено в 0 или 1. Если validate_timestamps равно 0, OPcache не проверяет изменения файлов и не обновляет кеш автоматически.

Пошаговое решение: как очистить OPcache в WordPress

1. Временное отключение OPcache

Если у вас есть доступ к php.ini, установите:

opcache.enable=0
opcache.enable_cli=0

Перезапустите веб-сервер (например, systemctl restart php-fpm или service apache2 restart) и проверьте, что сайт отображается с изменениями.

2. Очистка кеша OPcache программно

Добавьте в файл functions.php вашей темы или в отдельный плагин следующий код:

function wpcache_clear_opcache() {
    if (function_exists('opcache_reset')) {
        opcache_reset();
        error_log('OPcache has been reset');
        return true;
    }
    return false;
}

Вызовите функцию wpcache_clear_opcache() вручную или через AJAX при обновлении файлов. Например, для быстрой проверки можно временно добавить вызов в хук admin_init:

add_action('admin_init', function() {
    wpcache_clear_opcache();
});

3. Настройка автоматической очистки OPcache при обновлении файлов

Для сайтов с частыми обновлениями полезно автоматизировать сброс OPcache. Пример с использованием WP-CLI для сброса кеша после деплоя:

wp eval "if(function_exists('opcache_reset')) opcache_reset();"

Также можно настроить скрипт, который запускается после загрузки обновлений на сервер.

Проверка результата после очистки OPcache

  • Изменения в PHP-файлах должны сразу отображаться на сайте.
  • Логи error_log должны содержать сообщения об успешной очистке OPcache.
  • Проверка через phpinfo() показывает обновлённый кеш.

Частые ошибки при работе с OPcache и их исправление

  • OPcache не сбрасывается автоматически: проверьте, что opcache.validate_timestamps равно 1. Если нет, измените в php.ini и перезапустите сервер.
  • Функция opcache_reset() недоступна: возможно, OPcache отключён или используется устаревшая версия PHP.
  • Сброс OPcache не помогает: проверьте другие уровни кэширования (например, на стороне сервера или CDN).

Практические советы по безопасности и производительности

  • Не отключайте OPcache в продакшн-среде без крайней необходимости — это ухудшит производительность.
  • Автоматизируйте сброс OPcache только при обновлении кода, а не на каждом запросе.
  • Используйте логи для мониторинга успешности очистки кеша.
  • Если используете кеширование на уровне сервера (например, Nginx fastcgi_cache), убедитесь, что оно не конфликтует с OPcache.

Сравнение методов очистки OPcache

МетодПлюсыМинусы
Отключение OPcache в php.iniГарантированное обновление кодаПадение производительности
Использование opcache_reset()Точный сброс кеша без отключения OPcacheТребуется доступ к коду и функциям
Автоматизация через WP-CLIУдобно для CI/CD и деплояТребует настройки сервера и CLI
×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙