Есть ли способ очистки/сброса кэшированных файлов с помощью Opcache с PHP5.4 или ниже?
Вот функция opcache_reset()
, которая вроде бы работает с PHP5.5
Обходным путем была перезагрузка...
Изменить: я открыл проблему на Github.
Есть ли способ очистки/сброса кэшированных файлов с помощью Opcache с PHP5.4 или ниже?
Вот функция opcache_reset()
, которая вроде бы работает с PHP5.5
Обходным путем была перезагрузка...
Изменить: я открыл проблему на Github.
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 выдает запрос на перезапуск кеша, который подключен к этому процессу; к сожалению, cli SAPI создает частный кеш, так что это не очень хорошо.
Главное, что нужно понять в системах *nix, заключается в том, что OPcache полагается на какой-то базовый менеджер процессов, такой как Apache или FPM, для запуска OPcache, что приводит к mmap()
SMA, содержащему кеш. Затем диспетчер процессов разветвляет дочерние процессы, которые обслуживают запросы, а также случайно наследуют область mmapped от родителя.
Поэтому, если вы хотите сбросить кэш OPcache, подключенный к PHP-FPM, вы должны сделать это с помощью скрипта, работающего в службе PHP-FPM. Это должно быть только 4-строчное. Если вы хотите сделать это из командной строки, вы можете использовать wget, curl или сценарий PHP CLI, который использует расширение curl для запуска этого сценария FPM.
Но не забудьте использовать какой-нибудь надежный механизм аутентификации между ними, чтобы предотвратить использование сторонними лицами.
Если вы хотите понять немного больше, я сделал этот обзор: Zend Кэширование движка и кода операции. Если у вас есть отзывы или вопросы, оставьте комментарий здесь или поднимите вопрос на 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_ * методы).
Изменить Посмотрев на приведенную выше панель управления, я заметил, что она проверяет версию PHP и наличие opcache_reset.
Кажется, он пытается использовать accelerator_*, а не opcache_*
функции.
Я предлагаю попробовать этот сценарий, чтобы увидеть, работает ли он для вас, а затем мы можем работать в обратном направлении, чтобы увидеть, что именно установлено на вашем сервере и какие методы использовать.
opcache_reset
)?
- person schickling; 18.07.2013
php -r "echo function_exists('opcache_reset')?'opcache_':(function_exists('accelerator_reset')?'accelerator_':'');"
возвращает opcache_
. Я использую PHP-FPM с nginx
- person schickling; 19.07.2013
opcache_reset()
, но через экземпляр PHP-FPM. Вручную я всегда пытался запустить команду через PHP-CLI. Есть ли способ запустить команду php через PHP-FPM через терминал? (Необходимо для развертывания)
- person schickling; 19.07.2013
curl
локальный веб-скрипт. Нет ли лучшего способа сделать это?
- person schickling; 19.07.2013
Если у вас есть сайт WordPress на вашем сервере, просто установите плагин OPcache Dashboard. Это дает вам интерактивное управление, а также запускает сброс кеша после запуска процесса автоматического обновления Wordpress.
Еще одна вещь, которую следует отметить в отношении сервера, на котором запущено несколько экземпляров одной и той же CMS, — это то, что происходит, если на них работают разные версии CMS или плагинов. Это произойдет, например. если вы разносите обновления основных выпусков. В этом случае ваш PHP.ini должен включать
opcache.use_cwd=1
таким образом, одно и то же имя файла будет скомпилировано отдельно в зависимости от каталога, в котором он находится. Если вы уверены, что ваши версии CMS идентичны на всех сайтах, вы можете установить его на 0 и получить прирост эффективности, поскольку OpCache будет компилировать каждую процедуру один раз, а затем обслуживать ее для все экземпляры CMS на вашем сервере. Это также дает выигрыш в эффективности использования памяти и будет весьма значительным, если у вас есть большое количество экземпляров на вашей ферме WP.