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

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

обходным путем была перезагрузка...

Edit: я открыл вопрос на 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 на a php-cli запрос, тогда OPcache выдаст запрос перезапуска для кэша, который подключен к этому процессу; к сожалению, cli SAPI создает частный кэш, поэтому это не делает много хорошего.

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

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

но не забудьте использовать сильную аутентификацию механизм между ними для предотвращения эксплуатации третьей стороной.

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


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

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

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

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

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

кажется, попробовать accelerator_*, а не opcache_* функции.

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


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

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

opcache.use_cwd=1

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