Php 暂时禁用OPCache

Php 暂时禁用OPCache,php,opcache,Php,Opcache,我最近转到PHP5.4并安装了OPCache,它非常强大 如何临时禁用缓存 我试过: ini_set('opcache.enable', 0); 但它没有效果 谢谢一旦脚本运行,就不能缓存文件了。您需要在PHP之外设置它: 如果PHP作为Apache模块运行,请使用.htaccess文件: php_flag opcache.enable Off opcache.enable=0 如果PHP以CGI/FastCGI运行,请使用.user.ini文件: php_flag opcache.

我最近转到PHP5.4并安装了OPCache,它非常强大

如何临时禁用缓存

我试过:

 ini_set('opcache.enable', 0);
但它没有效果


谢谢

一旦脚本运行,就不能缓存文件了。您需要在PHP之外设置它:

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

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

    php_flag opcache.enable Off
    
    opcache.enable=0
    
而且,在任何情况下,如果您有权访问,您都可以使用良好的旧系统范围的
php.ini

php\u ini\u ALL,这意味着ini\u set()确实可以工作,但只有在当前请求中,才能对当前请求中编译的其余脚本禁用OPcache缓存。(不能强制启用)。对于其他请求,它将恢复为系统默认值。在此阶段,请求脚本将已经被缓存,除非您在脚本中执行ini_设置

系统默认值(PHP\u INI\u system)作为PHP系统启动的一部分被锁定,无法重新读取。因此,以Apache为例,您需要重新启动Apache来更改/重新加载它们

.htaccess
php\u标志
指令仅适用于运行mod\u php或等效程序的情况。它们和
.user.ini
文件是PHP\u ini\u PERDIR,在请求激活时也会被锁定

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

也考虑(在DEV上下文)设置<代码> opCase.ValueTyTimePays= = 和<代码> opCase.RealEdvestAfFrq=0 。这将使OPcache保持启用状态,但脚本将在每个编译请求上进行统计,以查看它们是否被更改。这在开发时提供了两个方面的最佳效果


还要阅读
opcache.blacklist\u filename
指令。这允许您指定一个排除文件,因此如果该文件包含
/var/www/test
,并且web服务docroot是
/var/www
,则
/var/www/test*
层次结构中的任何脚本都不会被缓存。

我在特定PHP文件中找到的禁用opcache的最佳方法是:
opcache\u invalidate(\uuuu文件,true);


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

在我看来,因为我不是专家,Jul给出了最好的答案。这个问题包括“临时”一词,所以我认为更改配置文件…不是最好的答案,因为您需要重新配置,运行所需的,然后重新配置以使其正常工作

它不光滑

使用Jul的答案,您可以通过禁用opcache来修改代码以执行某些操作,并在同一代码中返回到正常情况(尽管我们必须了解如何从opcache代码重新启用)


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

注意:还有一个
opcache。命令行php脚本的enable_cli
选项。我必须将php_标志更改为php_值(Ubuntu)@dev101很奇怪,因为它很明显:-?嗯,很奇怪,我第一次检查它时缓存仍然处于活动状态,现在它正在工作。可能是我打错了旁边的书签。有没有办法将web_路径而不是文件名列入黑名单?例如,在Laravel中,只有一个“引导”整个应用程序的PHP文件。@pilat No.黑名单基于所需或自动加载的任何文件的完全解析文件名,而不是符号文件名。由于URI通常会在CMS或wiki等复杂应用程序中加载大约100个模块/文件,因此使用“web路径”没有意义。如果我做对了,你也只能在.user.ini文件中禁用-不能启用。