如何确定是不是启用了 PHP OPcache?

Posted

技术标签:

【中文标题】如何确定是不是启用了 PHP OPcache?【英文标题】:How to determine if PHP OPcache is enabled or not?如何确定是否启用了 PHP OPcache? 【发布时间】:2014-05-11 11:15:17 【问题描述】:

我正在尝试在我的服务器上启用 opCache(ubuntu 12.04 LTS,运行 apache 2.4.7php Version 5.5.10-1+deb.sury.org~precise+1)。

在开始做任何事情之前,我阅读了this highly relevant post,它告诉我 opCache 默认是禁用的,我必须手动启用它。

我进入php.ini,发现没有opcache.so的文字,所有与opcache相关的东西都被注释掉了。像这样:

[opcache]
; Determines if Zend OPCache is enabled
;opcache.enable=0

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

这没关系,因为该人告诉它已禁用。但是当我咨询phpinfo(); 时,它显示了以下内容(根据我的理解,它告诉我 opCache 已被使用)。

那么我的 opcache 是否已启用和使用,我如何查看/验证它?

【问题讨论】:

你在运行phpinfo()987654330@之前重启了你的服务器 @Victory 我刚刚重新启动它,结果是一样的。 (除了缓存命中 3、缓存未命中 2 中的数字)。还使用/空闲内存缓存脚本/键。这实际上让我更相信它已经在运行了。 我有同样的问题,但我的价值观没有动摇..i.imgur.com/JwEaGwu.png有什么建议吗? 【参考方案1】:

相信你的phpinfo(),你已经运行了必要的共享模块,否则它不会出现。

此外,您的 opcache 确实已启用,但仅适用于 web,而不适用于 cli。该库的默认设置是为 web 启用的,要 disable 取消注释以分号开头的行,如下所示:

 opcache.enable=0 

如前所述,对于命令行 php 使用,默认是禁用的,要启用它,取消注释并设置为 1

 opcache.enable_cli=1

这里是所有运行时参数的列表和默认值以供进一步参考:http://www.php.net/manual/en/opcache.configuration.php

更新:自 2020 年起,此库可能不再维护,请参阅下面的 cmets 了解其他可能的选项。

如果你想要一个很酷的 web 监控页面(就像 apc.php 为 apc 做的那样)试试这个:https://github.com/rlerdorf/opcache-status

【讨论】:

酷,谢谢。显然,我确实必须信任 phpinfo 而不是高度赞成的答案。感谢您确认。 @SalvadorDali 您所指的另一篇关于扩展的共享库是否存在和加载的帖子。我认为可以清楚地说明,共享模块可能未设置为默认加载 php 5.5 构建,但这并不意味着它已“禁用”,甚至没有加载。显然,您的设置启用了模块的共享库。启用模块后,您可以使用配置设置来打开和关闭特定功能并启用/禁用特定功能。 出于某种原因,我认为这个答案在未来几年会大受欢迎:) 只是想说如果您需要从您的 cli 中检查它,您可以运行 php -i | grep opcache github.com/rlerdorf/opcache-status 很久没有更新了。试试github.com/amnuts/opcache-gui。它会定期更新。【参考方案2】:

由于某种原因,有很多关于 PHP OPcache for PHP v5.5(第一个支持它的版本)的文档相互矛盾,一些网页说它默认启用,另一些说它已编译,但未启用, 默认情况下。

仅凭我的记忆,我想我已经看到了 OPcache 确实已编译但尚未启用的 PHP 5.5 和 5.6 安装。这可以解释为什么默认的php.ini 行显示禁用。混淆可能是由于编译 PHP 的各种方式造成的。

无论如何,由于各种原因,PHP 7+ pretty much always 似乎默认启用了 OPcache,并且再次避免了复杂的讨论:编译。

话虽如此,OP 问题实际上是为了检查 OPcache 是否启用(仅)。

为此,有一个special functionopcache_get_status,也可以accept arrays。展望未来,这个功能可能会变得更受欢迎,因为它比php.ini 更适合解释 OPcache 配置设置,并且可以用于各种脚本等。

这是一个简单的例子:

<?php (is_array(opcache_get_status()) ? 'enabled' : 'disabled') ?>

参考:https://www.digitalocean.com/community/questions/enable-php-5-5-opcache-on-ubuntu-14-04-with-nginx-and-php-fpm?comment=25376

【讨论】:

另请注意,您可以检查 function_exists( 'opcache_get_status' ) 以避免致命错误 根据我是调用echo "starting test\nopcache status:".is_array(opcache_get_status()) ? 'enabled' : 'disabled'; 还是只调用echo is_array(opcache_get_status()) ? 'enabled' : 'disabled';,我会产生不同的结果——这有点不方便......

以上是关于如何确定是不是启用了 PHP OPcache?的主要内容,如果未能解决你的问题,请参考以下文章

启用 PHP 5.5 OPCache

如何在 MAC Sierra (MAMP) 上为 PHP7.1 启用 OPCache

在 wamp 中为 php 启用 opcache

PHP5.5+启用OPCache

启用 Opcache 不起作用

启用 OPCache 在 WAMP 中不起作用