我最近迁移到 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 缓存。(您不能强制启用)。对于其他请求,它将恢复为系统默认值。到这个阶段,请求脚本已经被缓存了,除非你在auto_prepend_file脚本中执行了 ini_set。
系统默认值 ( PHP_INI_SYSTEM ) 作为 PHP 系统启动的一部分被锁定,无法重新读取。因此,以 Apache 为例,您需要重新启动 Apache 才能更改/重新加载这些内容。
这些 .htaccess
php_flag
指令仅在您运行 mod_php 或等效项时适用。它们和.user.ini
文件是 PHP_INI_PERDIR,在请求激活时也会被锁存。
现在到我认为你可能会问的问题。如果您有一个开发系统,那么最简单的方法是opcache.enable=0
在适当的 INI 文件中进行设置并重新启动您的网络服务器。完成后将其设置回=1
并重新启动。
还要考虑(在开发环境中)设置opcache.validate_timestamps=on
和opcache.revalidate_freq=0
. 这将使 OPcache 保持启用状态,但脚本将在每个编译请求上进行统计,以查看它们是否已更改。这在开发时提供了两全其美的效果。
还要阅读opcache.blacklist_filename
指令。这允许您指定一个排除文件,因此如果它包含/var/www/test
,并且 Web 服务 docroot 是,/var/www
那么层次结构中的任何脚本/var/www/test*
都不会被缓存。
在我的案例中,我发现在特定 PHP 文件中禁用 opcache 的最佳方法是:opcache_invalidate(__FILE__, true);
您还可以使用 PHP 重置所有缓存: opcache_reset();
在我看来,因为我不是专家,所以 Jul 给出了最好的答案。该问题包括“临时”一词,因此更改配置文件我认为...不是最佳答案,因为您需要重新配置,运行所需的内容并再次重新配置以使其正常工作。
它不平滑。
使用 Jul 的答案,您可以通过禁用 opcache 来修改代码以执行某些操作,并在同一代码中返回正常情况(尽管我们必须看看如何从代码中重新启用 opcache)
例如,使用 Prestashop,如果启用 opcache,从管理界面清除“正常”缓存可能会出现问题,因此在这种情况下,您可以使用一种方法,以便在执行操作时禁用 opcache,“正常”缓存被清除,然后再次启用 opcache。