如何清除APC缓存条目?

2022-08-30 06:35:54

我需要在部署新版本的站点时清除所有 APC 缓存条目。APC.php有一个用于清除所有操作码缓存的按钮,但我没有看到用于清除所有用户条目,所有系统条目或所有每个目录条目的按钮。

是否可以通过命令行或其他方式清除所有缓存条目?


答案 1

您可以使用 PHP 函数 。apc_clear_cache

调用将清除系统缓存,调用将清除用户缓存。apc_clear_cache()apc_clear_cache('user')


答案 2

我不相信这些答案中的任何一个实际上都适用于从命令行清除APC缓存。正如Frank Farmer在上面评论的那样,CLI在独立于Apache的进程中运行。

我从命令行清除的解决方案是编写一个脚本,将 APC 清除脚本复制到目录并访问它,然后将其删除。该脚本仅限于从本地主机访问。web

  1. apc_clear.php

    这是脚本复制到 Web 目录、访问和删除的文件。

    <?php
    if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
    {
      apc_clear_cache();
      apc_clear_cache('user');
      apc_clear_cache('opcode');
      echo json_encode(array('success' => true));
    }
    else
    {
      die('SUPER TOP SECRET');
    }
    
  2. 缓存清除脚本

    此脚本apc_clear.php复制到 Web 目录,访问该目录,然后将其删除。这是基于Symfony任务。在Symfony版本中,调用Symfony形式的复制和取消链接,处理错误。您可能希望添加检查以使其成功。

    copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory
    
    $url = 'http://localhost/apc_clear.php'; //use domain name as necessary
    $result = json_decode(file_get_contents($url));
    
    if (isset($result['success']) && $result['success'])
    {
      //handle success
    }
    else
    {
      //handle failure
    }
    
    unlink($apcPaths['web']);
    

推荐