暂时禁用 OPCache

2022-08-30 10:50:16

我最近迁移到PHP 5.4并安装了OPCache,它非常强大!

如何暂时禁用缓存?

我试过了:

 ini_set('opcache.enable', 0);

但它没有任何效果。

谢谢


答案 1

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

  • 如果 PHP 作为 Apache 模块运行,请使用一个文件:.htaccess

    php_flag opcache.enable Off
    
  • 如果 PHP 以 CGI/FastCGI 的形式运行,请使用一个文件:.user.ini

    opcache.enable=0
    

在所有情况下,如果您有权访问它,您也可以在系统范围内使用良好的旧系统。php.ini


答案 2

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

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

这些指令仅在运行mod_php或等效项时才适用。它们和文件PHP_INI_PERDIR,也会在请求激活时锁定。.htaccessphp_flag.user.ini

现在来问问,我想你可能会问。如果你有一个开发系统,那么最简单的方法是设置适当的INI文件并重新启动你的Web服务器。将其设置回,完成后再次重新启动。opcache.enable=0=1

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

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


推荐