暂时禁用OPCache

时间:2014-02-04 15:24:50

标签: php opcache

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

如何暂时禁用缓存?

我试过了:

 ini_set('opcache.enable', 0);

但它没有效果。

由于

4 个答案:

答案 0 :(得分:72)

一旦你的脚本运行,没有缓存文件为时已晚。你需要在PHP之外设置它:

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

    php_flag opcache.enable Off
    
  • 如果PHP以CGI / FastCGI身份运行,请使用.user.ini文件:

    opcache.enable=0
    

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

答案 1 :(得分:21)

opcache.enable PHP_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,在请求激活时也会被锁存。

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

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

同时阅读opcache.blacklist_filename指令。这允许您指定排除文件,因此如果其中包含/var/www/test,并且Web服务docroot为/var/www,那么<{1}}层次结构中的任何脚本都不会被缓存。

希望这有帮助:)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

根据我的谦虚意见,因为我不是专家,所以Jul给出了最佳答案。问题包括“临时”一词,因此更改我认为的配置文件不是最佳答案,因为您需要重新配置,运行所需的内容并再次重新配置以使其正常工作。

这不顺利。

有了Jul的答案,您可以通过禁用操作缓存来修改代码以执行某些操作,并在同一代码内恢复正常状态(尽管我们必须查看如何从操作缓存代码中重新启用代码)

例如,对于Prestashop,如果启用了opcache,则可能会从管理界面清除“常规”缓存,因此在这种情况下,您可以使用一种方法,以便在执行操作时禁用opcache,清除“常规”缓存,然后再次启用opcache。