我最近升级到了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,这也将在请求激活时被锁定。
现在回答您可能正在问的问题。 如果您有开发系统,则最简单的方法是在适当的INI文件中设置opcache.enable = 0
,然后重新启动Web服务器。 完成后,请将其设置回= 1
,然后再次重新启动。
还要考虑(在开发上下文中)设置opcache.validate_timestamps = on
和opcache.revalidate_freq = 0
。 这将保持OPcache启用,但脚本将在每个编译请求上进行状态检查以查看它们是否更改。 在开发时,这既可以得到最佳效果。
还要阅读一下opcache.blacklist_filename
指令。这将允许您指定一个排除文件,因此如果其中包含/var/www/test
,并且Web服务文档根目录是/var/www
,则任何位于/var/www/test*
层次结构中的脚本都不会被缓存。
在我个人的情况下,禁用特定PHP文件中的opcache最好的方法是:opcache_invalidate(__FILE__, true);
您还可以使用PHP重置所有缓存:opcache_reset();
opcache.enable_cli
选项。 - Ikar Pohorský