首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opcache失效不会更新opcache状态。

opcache失效不会更新opcache状态。
EN

Stack Overflow用户
提问于 2014-05-10 22:33:02
回答 1查看 1.4K关注 0票数 1

对于操作码缓存(php5.5),我编写了一个小脚本。但是,状态确实告诉我无效宣告失败了。这是怎么发生的?

代码语言:javascript
复制
<?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文件”)语句!

如何复制:

  1. 安装一个大的FW应用程序(这里使用ZF2 )
  2. 将上面的文件放在应用程序的webroot中
  3. 运行应用程序(500+文件将被缓存)
  4. 运行脚本,输出将类似于:

清除了560个OPcache文件 缓存中仍有560个文件。

有人能解释一下吗?这些文件确实被清除了吗?

PS。我知道上面的内容可以用opcache_reset()代替,但是脚本将在某个文件子集上筛选,作为下一步。它用于清除单个应用程序中的文件操作码,即使单个服务器上运行多个应用程序。重置将清除所有这些文件,这不是一个选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-10 22:42:40

Opcache不会将无效的项目从内存中驱逐出去--它们会一直呆在那里,直到池满为止,此时内存将被完全清除。存在无效的缓存项并不会阻止PHP再次加载/编译文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23587015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档