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

时间:2011-02-16 14:38:25

标签: php apc opcode

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

apc.cache_by_default => On
apc.enabled => On
apc.ttl => 7200

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

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

<?php
echo "Hi there";
?>

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

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

3 个答案:

答案 0 :(得分:21)

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

<pre><?php
print_r(apc_cache_info());

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

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


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

cp /usr/share/doc/php-apc/apc.php /usr/share/nginx/html/apc-stats.php

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

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

答案 1 :(得分: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;
}

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

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

答案 2 :(得分:9)

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