对于操作码缓存(php5.5),我编写了一个小脚本。但是,状态确实告诉我无效宣告失败了。这是怎么发生的?
<?php
$scripts = opcache_get_status(true)["scripts"];
$failures = array();
foreach (array_keys($scripts) as $file) {
$result = opcache_invalidate($file, true);
if (!$result) $failures[] = $file;
}
if(count($failures) !== 0) {
exit("Failed to clear OPcache for files " . implode(", ", $failures));
}
echo sprintf("%s OPcache files cleared\n", count($scripts));
$scripts = opcache_get_status(true)["scripts"];
echo sprintf("There are still %s files in the cache", count($scripts));它现在是一个非常简单的脚本(它将是Soflomo\Cache的一部分)。我的问题是,第一个回送("x OPcache文件清除为web")打印的数字与最后一个回波(“缓存中仍然有x文件”)语句!
如何复制:
清除了560个OPcache文件 缓存中仍有560个文件。
有人能解释一下吗?这些文件确实被清除了吗?
PS。我知道上面的内容可以用opcache_reset()代替,但是脚本将在某个文件子集上筛选,作为下一步。它用于清除单个应用程序中的文件操作码,即使单个服务器上运行多个应用程序。重置将清除所有这些文件,这不是一个选项。
发布于 2014-05-10 22:42:40
Opcache不会将无效的项目从内存中驱逐出去--它们会一直呆在那里,直到池满为止,此时内存将被完全清除。存在无效的缓存项并不会阻止PHP再次加载/编译文件。
https://stackoverflow.com/questions/23587015
复制相似问题