暂时禁用OPCache

Ant*_*ony 40 php opcache

我最近搬到PHP 5.4并安装了OPCache,它功能非常强大!

如何暂时禁用缓存?

我试过了 :

 ini_set('opcache.enable', 0);
Run Code Online (Sandbox Code Playgroud)

但它没有效果.

谢谢

Álv*_*lez 77

脚本运行后,不缓存文件为时已晚.你需要在PHP之外设置它:

而且,无论如何,php.ini如果您有权访问它,您可以在系统范围内使用旧的.

  • 请注意:命令行php脚本还有一个“ opcache.enable_cli”选项。 (2认同)
  • 我不得不将php_flag更改为php_value(Ubuntu) (2认同)

Ter*_*ryE 22

opcache.enablePHP_INI_ALL,这意味着ini_set()确实有效,但仅适用于当前请求,以禁用当前请求中编译的其余脚本的OPcache缓存.(你不能强制启用).它将恢复为其他请求的系统默认值.在此阶段,除非您在auto_prepend_file脚本中执行ini_set,否则请求脚本已经被缓存.

系统默认值(PHP_INI_SYSTEM)作为PHP系统启动的一部分被锁存,无法重新读取.因此,例如在Apache的情况下,您需要重新启动Apache来更改/重新加载这些.

.htaccess php_flag指令仅适用于运行mod_php或等效的 指令.它们和.user.ini文件是PHP_INI_PERDIR,它们也会在请求激活时被锁存.

现在到Q,我认为你可能会问.如果您有一个开发系统,那么最简单的方法是opcache.enable=0在相应的INI文件中设置并重新启动您的网络服务器.完成后将其重新设置=1并重新启动.

还要考虑(在开发上下文中)设置opcache.validate_timestamps=onopcache.revalidate_freq=0.这将保持启用OPcache,但脚本将在每个编译请求上进行统计,以查看它们是否已更改.这在开发时提供了两全其美的优势.

另请阅读该opcache.blacklist_filename指令.这允许您指定排除文件,因此如果包含/var/www/test,并且Web服务docroot是,/var/www则层次结构中的任何脚本/var/www/test*都不会被缓存.

希望这可以帮助 :)


Jul*_*Jul 8

在我的案例中,我发现在特定 PHP 文件中禁用 opcache 的最佳方法是: opcache_invalidate(__FILE__, true);

您还可以使用 PHP 重置所有缓存: opcache_reset();