Мне неоднократно задавали вопрос — почему на некоторых хостингах при сохранении PHP-файлов по FTP/SFTP изменения видны не сразу, а часто с опозданием в несколько минут. Рассказываю, откуда берется этот эффект и как от него избавиться.
Прежде всего нужно убедиться, что в Вордпресс отключено кеширование или настроено таким образом, что авторизованные пользователи видят некешированные страницы, а также исключить браузерный кеш.
Кеширование Вордпресс
Например, в популярном плагине WP Super Cache кеширование для известных пользователей отключается одной галочкой.
Чтобы полностью исключить влияние плагинов кеширования, на время отладки их можно вообще деактивировать.
Браузерное кеширование
Браузеры сохраняют статичные данные в локальном хранилище, чтобы при их повторном запросе не тратить время на повторную загрузку из сети. Естественно, во время отладки все это очень мешает.
Обновить страницу с принудительной перезагрузкой всех данных можно с помощью комбинации Cmd+Shift+R на Маках и Ctrl+Shift+R под Виндоус. Можно воспользоваться режимом «Частный доступ» в Сафари или режимом «Инкогнито» в Хроме. Оба режима вызываются одной комбинацией Cmd+Shift+N.
Серверное кеширование OPCache
Если вы точно уверены, что проблемы создает не кеш браузера и не кеш Вордпресс, похоже, что у вас включено серверное кеширование.
Его внезапное появление часто связано с повышением версии PHP. Например, у вас на хостинге был включен PHP 5.3, а после перехода на PHP 7 изменения в PHP-скриптах вдруг стали появляться с большим опозданием. Если так, скорее всего ваш PHP работает с активным механизмом кеширования байт-кода, который называется OPCache.
Для справки
PHP-код перед выполнением компилируется в байт-код. В старых версиях PHP компиляция выполнялась каждый раз при выполнении скрипта, в новых OPCache хранит байт-код в памяти и выполняет его при повторном запросе. Это дает большой прирост в скорости, снижении нагрузки и т.д.
Естественно, заниматься отладкой кода с активным OPCache очень некомфортно. Поэтому, если отладка происходит на боевом сайте, кеширование на время работ лучше отключить. Делается это очень просто, добавлением одной строчки в php.ini.
Как отключить
В качестве примера, покажу как отключается OPCache в панели ISP виртуального хостинга Рег.ру.
Подключаемся к серверу по FTP или открываем файловый менеджер в панели управления хостингом, идем в директорию php-bin, выбираем файл php.ini и нажимаем «Изменить».
Для PHP версий 5.5, 5.6, 7.0, 7.1 добавляем такую строку.
opcache.enable = Off
В старых версиях PHP 5.3 и 5.4 чаще всего используется XCache, он отключается такой строчкой.
xcache.cacher = Off
Чтобы изменения вступили в силу, нужно перезагрузить сервер.
Ручная перезагрузка доступна не везде, поэтому перезагрузить принудительно сервер можно, сменив версию PHP на более старую, а потом снова вернуть рабочую.
После отладки не забудьте снова включить OPCache и перезагрузить сервер.
Все таки OPCache существенно экономит ресурсы, и будет не совсем разумно от него отказываться.
И напомню, проверить версию PHP и узнать обо всех установленных расширениях можно с помощью функции phpinfo();
И ещё
Можно попробовать добавить в корневой .htaccess такую инструкцию:
php_flag opcache.enable Off
Но работает это не везде.
Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.
Подробнее