Недавно я перешел на 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*
не будут кэшироваться.
Надеюсь это поможет 🙂