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

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

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

Я пытался :

ini_set('opcache.enable', 0); 

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

благодаря

После запуска вашего скрипта слишком поздно, чтобы не кэшировать файл. Вы должны установить его за пределами 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 для оставшейся части скриптов, скомпилированных в вашем текущем запросе. (Вы не можете принудительно включить). Он возвращается к системному стандарту для других запросов. На этом этапе скрипт запроса уже был кэширован, если вы не выполните ini_set в сценарии auto_prepend_file .

Системные значения по умолчанию ( 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* не будут кэшироваться.

Надеюсь это поможет 🙂