Недавно я перешел на PHP 5.4 и установил OPCache, он очень мощный!
Как временно отключить кеш?
Я пробовал:
ini_set('opcache.enable', 0);
Но это не имеет никакого эффекта.
Спасибо
Недавно я перешел на PHP 5.4 и установил OPCache, он очень мощный!
Как временно отключить кеш?
Я пробовал:
ini_set('opcache.enable', 0);
Но это не имеет никакого эффекта.
Спасибо
Как только ваш script запускается, слишком поздно, чтобы не кэшировать файл. Вам нужно установить его вне PHP:
Если PHP работает как модуль Apache, используйте файл .htaccess
:
php_flag opcache.enable Off
Если PHP работает как CGI/FastCGI, используйте файл .user.ini
:
opcache.enable=0
И в любом случае вы можете использовать старый добрый общесистемный php.ini
, если у вас есть к нему доступ.
opcache.enable является PHP_INI_ALL, что означает, что ini_set() работает, но только для текущего запроса отключить Кэширование OPcache для остальной части скриптов, скомпилированных в вашем текущем запросе. (Вы не можете принудительно включить). Он возвращается к системному стандарту для других запросов. На этом этапе запрос script уже был кэширован, если вы не сделаете ini_set в auto_prepend_file script.
Системные значения по умолчанию (PHP_INI_SYSTEM) фиксируются как часть запуска системы PHP и не могут быть перечитаны. Например, в случае Apache вам необходимо перезапустить Apache, чтобы изменить/перезагрузить их.
Директивы .htaccess
php_flag
применяются только в том случае, если вы используете mod_php или эквивалент. Они и .user.ini
являются файлами PHP_INI_PERDIR, которые также будут заблокированы при активации запроса.
Теперь к Q, который, я думаю, вы можете спросить. Если у вас есть система dev, самым простым способом является установка opcache.enable=0
в соответствующий INI файл и перезапуск вашего веб-сервера. Верните его на =1
и снова перезапустите, когда вы закончите.
Также рассмотрите (в контексте dev) установку opcache.validate_timestamps=on
и opcache.revalidate_freq=0
. Это приведет к тому, что OPcache будет включен, но скрипты будут установлены в каждом запросе на компиляцию, чтобы проверить, не изменены ли они. Это дает лучшее из обоих миров при разработке.
Также ознакомьтесь с директивой opcache.blacklist_filename
. Это позволяет указать файл исключения, поэтому если он содержит /var/www/test
, а docroot веб-службы /var/www
, то любые скрипты в иерархиях /var/www/test*
не будут кэшироваться.
Надеюсь, что это поможет:)
Лучший способ, который я нашел в моем случае для отключения opcache в определенном файле PHP, это: opcache_invalidate(__FILE__, true);
Вы также можете сбросить весь кеш с помощью PHP: opcache_reset();