Подтвердить что ты не робот

Временно отключить OPCache

Недавно я перешел на PHP 5.4 и установил OPCache, он очень мощный!

Как временно отключить кеш?

Я пробовал:

 ini_set('opcache.enable', 0);

Но это не имеет никакого эффекта.

Спасибо

4b9b3361

Ответ 1

Как только ваш script запускается, слишком поздно, чтобы не кэшировать файл. Вам нужно установить его вне PHP:

  • Если PHP работает как модуль Apache, используйте файл .htaccess:

    php_flag opcache.enable Off
    
  • Если PHP работает как CGI/FastCGI, используйте файл .user.ini:

    opcache.enable=0
    

И в любом случае вы можете использовать старый добрый общесистемный php.ini, если у вас есть к нему доступ.

Ответ 2

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* не будут кэшироваться.

Надеюсь, что это поможет:)

Ответ 3

Лучший способ, который я нашел в моем случае для отключения opcache в определенном файле PHP, это: opcache_invalidate(__FILE__, true);

Вы также можете сбросить весь кеш с помощью PHP: opcache_reset();