如何检查APC操作码缓存在PHP中是否正常工作?

Lin*_*ina 26 php apc opcode

我正在使用启用了APC缓存的PHP:

apc.cache_by_default => On
apc.enabled => On
apc.ttl => 7200
Run Code Online (Sandbox Code Playgroud)

现在我怎么知道它是否100%使用操作码缓存.

例如,让我们说我有这个PHP文件:

<?php
echo "Hi there";
?>
Run Code Online (Sandbox Code Playgroud)

现在运行此文件后,让我们将其更改为 echo "Bye there";

不应该回应"你好",因为7200秒的TTL尚未结束?我对吗?如果是这样,为什么它会回应"再见"?如果我错了,即使更改文件后如何强制它使用操作码缓存?

Sim*_*ast 21

我能找到告诉APC是否正常工作的最简单方法是创建一个包含此代码的新PHP文件...

<pre><?php
print_r(apc_cache_info());
Run Code Online (Sandbox Code Playgroud)

它将apc_cache_info()的内容转储到屏幕上(小心,在一个大型的实时站点上,这可能是很多数据!).

每次重新加载此PHP文件时,都应该看到num_hits增加,这意味着使用了操作码缓存.未命中表示APC必须从源重新编译文件(通常在每次更改时完成).


要获得此信息的更好界面,您可以使用apc.phpAPC附带的文件.我使用此控制台命令将其复制到我的网站目录(您的文件夹位置可能不同)...

cp /usr/share/doc/php-apc/apc.php /usr/share/nginx/html/apc-stats.php
Run Code Online (Sandbox Code Playgroud)

在浏览器中运行此文件可为您提供漂亮的颜色和图形!

有关详细信息,请参阅此链接:http:
//www.electrictoolbox.com/apc-php-cache-information/


irc*_*ell 19

我认为你不想在制作中这样做,但你可以随时使用apc_cache_info().

function is_file_cached($file) {
    $info = apc_cache_info();
    foreach ($info['cache_list'] as $cache) {
        if ($cache['filename'] == $file) return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将迭代每个缓存检查指定文件的文件,因此效率不高.

就您的具体问题而言,APC会在文件发生变化时自动使文件的缓存无效.因此,当您编辑文件时,APC会静默检测到该文件并提供新文件.您可以通过设置禁用此功能apc.stat = 0.


rik*_*rik 9

通常,APC会检查所请求的文件是否已被缓存,因为它已被缓存.您可以使用apc.stat来控制它.