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

2022-08-30 16:02:51

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

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

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

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

<?php
echo "Hi there";
?>

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

它不应该回响“你好”,因为7200秒的TTL还没有结束吗?我说的对吗?如果是这样,为什么它呼应“再见”?如果我错了,即使在更改文件后,我怎么能强迫它使用操作码缓存?


答案 1

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

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

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

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


要获得此信息的更好界面,您可以使用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/


答案 2

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


推荐