27

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

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

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

例如,假设我有这个 PHP 文件:

<?php
echo "Hi there";
?>

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

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

4

3 回答 3

22

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

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

它将 apc_cache_info() 的内容转储到屏幕上(请注意,在大型实时站点上,这可能是大量数据!)。

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


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

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

在浏览器中运行这个文件会给你漂亮的颜色和图表!

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

于 2013-07-13T15:23:20.183 回答
20

我不认为你会想在生产中这样做,但你总是可以使用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

于 2011-02-16T14:56:58.260 回答
9

通常,APC 会检查请求的文件是否在缓存后被修改。您可以使用apc.stat来控制它。

于 2011-02-16T14:47:35.677 回答