【问题标题】:Delete cached file for a specific URI删除特定 URI 的缓存文件
【发布时间】:2017-06-14 19:38:04
【问题描述】:

当我对自定义页面使用 HTTP 缓存时,Symfony2 会在缓存文件夹下为其创建一个文件,并且可以为该缓存设置超时。但是,当我更新与该特定页面相关的一些数据库信息时,我的用户无法看到更改(取决于缓存寿命)。为了解决这个问题,我想使用该页面的 URI 在更新操作中删除特定文件,但我不知道该怎么做!。

您知道如何删除缓存文件及其 URI 或任何其他解决此问题的方法吗?

【问题讨论】:

  • 在 symfony 书中说:“最标准的方法是通过特殊的 PURGE HTTP 方法请求清除给定 URL 的缓存”。但是如何从我的 symfony 控制器内部创建 PURGE HTTP 方法?

标签: php caching symfony symfony-2.1


【解决方案1】:

对我来说,这是可行的,但我已经修改了我的环境类。您必须使用自己的缓存路径和环境:

private function clearCache($slug)
{
    global $kernel;
    if (get_class($kernel) == 'AppCache') {
        $key = 'md' . hash('sha256', ($_SERVER['SERVER_PORT'] == 80 ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . '/' . $slug);
        $cacheMdFileName = \Environment::instance()->getCachePath() . '/' . $kernel->getKernel()->getEnvironment() . DIRECTORY_SEPARATOR . 'http_cache' . DIRECTORY_SEPARATOR . substr($key, 0, 2) . DIRECTORY_SEPARATOR . substr($key, 2, 2) . DIRECTORY_SEPARATOR . substr($key, 4, 2) . DIRECTORY_SEPARATOR . substr($key, 6);
        $file = file_get_contents($cacheMdFileName);
        $key = unserialize($file)[0][1]['x-content-digest'][0];
        $cacheEnFileName = \Environment::instance()->getCachePath() . '/' . $kernel->getKernel()->getEnvironment() . DIRECTORY_SEPARATOR . 'http_cache' . DIRECTORY_SEPARATOR . substr($key, 0, 2) . DIRECTORY_SEPARATOR . substr($key, 2, 2) . DIRECTORY_SEPARATOR . substr($key, 4, 2) . DIRECTORY_SEPARATOR . substr($key, 6);

        unlink($cacheMdFileName);
        unlink($cacheEnFileName);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2015-01-12
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多