Opcache - очистить кеш в PHP5.4 и ниже

Есть ли способ очистить / сбросить кэшированные файлы, используя Opcache с PHP5.4 или ниже?
Вот opcache_reset() функция, которая, кажется, работает с PHP5.5

Обходной путь должен был перезагрузиться...

Изменить: я открыл вопрос на Github

3 ответа

Решение

zend_accelerator_module.c объявляет два документированных вызова API: opcache_reset() а также opcache_invalidate() а также два недокументированных: opcache_get_status() а также opcache_get_configuration(), То, что они делают, довольно очевидно из источника.

Когда вы выпускаете opcache_reset() очевидно, он будет применяться только к кешу OPcache, который связан с процессом, выполняющим ваш PHP-скрипт. И да, в системе может быть много таких кешей.

Когда ты opcache.enable_cli=1 по запросу php- cli OPcache выдаст запрос на перезапуск для кеша, подключенного к этому процессу; к сожалению, клиент SAPI создает частный кэш, так что это не очень помогает.

Главное, что нужно понять в * nix системах, - это то, что OPcache полагается на некоторый базовый менеджер процессов, такой как Apache или FPM, для запуска OPcache, заставляя его mmap() SMA, который содержит кэш. Затем диспетчер процессов разветвляет дочерние процессы, которые обслуживают запросы, а также случайно наследует mmapped регион от родительского.

Поэтому, если вы хотите сбросить кэш OPcache, подключенный к PHP-FPM, вы должны сделать это, запустив скрипт, работающий в службе PHP-FPM. Это только должен быть 4-лайнер. Если вы хотите сделать это из командной строки, вы можете использовать wget, curl или PHP CLI-скрипт, который использует расширение curl для запуска этого FPM-скрипта.

Но не забудьте использовать какой-либо механизм строгой аутентификации между ними, чтобы предотвратить использование третьей стороной.

Если вы хотите понять немного больше, я сделал этот обзор: Zend Engine и кеширование кода операции. Если у вас есть отзывы или вопросы, то прокомментируйте здесь или поднимите вопрос на Github.

Посмотрите, доступен ли этот метод с помощью function_exists в вашей среде.

if( function_exists('opcache_reset') ) echo 'yay!';

Хотя он доступен в PHP5.5, потому что в него входит opcache, он также должен стать доступным, если вы установили OpCache в более старую версию php. Я полагаю, что это то, что отмечают документы, когда говорится PHP (PHP 5 >= 5.5.0, PECL ZendOpcache >= 7.0.0),

Я также успешно использовал эту быструю и грязную панель управления с PHP 5.4 (использует методы opcache_*).

Edit После просмотра вышеупомянутой связанной панели управления, я заметил, что она проверяет версию PHP и, если opcache_reset существует.

Кажется, попытаться акселератор_ *, а не opcache_* функции.

Я предлагаю попробовать этот скрипт, чтобы увидеть, работает ли он для вас, тогда мы можем работать в обратном направлении, чтобы увидеть, что именно установлено на вашем сервере и какие методы использовать.

Если у вас есть сайт WordPress на вашем сервере, просто установите плагин OPcache Dashboard. Он предоставляет вам интерактивное управление, а также запускает сброс кэша после запуска процесса автоматического обновления Wordpress.

Еще одна вещь, которую стоит отметить при работе сервера с несколькими экземплярами одной и той же CMS, это то, что происходит, если они работают с разными версиями CMS или плагинов. Это может произойти, например, если вы пошатываете обновления основных выпусков. В этом случае ваш PHP.ini должен включать

opcache.use_cwd=1

поэтому одно и то же имя файла будет скомпилировано отдельно в зависимости от того, в каком каталоге он находится. Если вы уверены, что ваши версии CMS идентичны для всех сайтов, вы можете установить его в 0 и получить повышение эффективности, потому что OpCache скомпилирует каждую подпрограмму один раз, а затем предоставит ее для все экземпляры CMS на вашем сервере. Это также повышает эффективность использования памяти и будет весьма значительным, если в вашей ферме WP имеется большое количество экземпляров.

Другие вопросы по тегам