如何从timthumb的缓存中删除特定文件?

时间:2012-08-10 20:57:27

标签: php timthumb

我有一个照片共享应用,我使用timthumb来显示缩略图。当用户删除照片时,我希望从timthumb的缓存目录中删除缓存的图像以节省空间。目前我只能从缓存中删除所有文件,但它不太理想。

如果在给定原始图像的情况下,如何仅从timthumb的缓存中删除特定文件?

2 个答案:

答案 0 :(得分:3)

假设我们要删除本地图像的缓存文件:

我们首先需要的是cacheDirectory = './ cache'
第二,FILE_CACHE_PREFIX = 'timthumb'
那么它是内部的(_ int _)
然后有一个 md5 哈希:

  • timthumb.php的修改时间
  • char' - '
  • timthumb.php的inode
  • 图片的修改时间
  • 调用图片时的$ _SERVER ['QUERY_STRING']
  • 'fileCacheVersion'始终是nubmer 1

最后,FILE_CACHE_SUFFIX = '。timthumb.txt'


例如:

HTML:

<img src='timthumb.php?src=images/example.png&w=150'>

PHP:

$cachefile = 'cache/timthumb_int_'.md5(filemtime('timthumb.php') . '-' . fileinode('timthumb.php') . filemtime("images/example.png"). "src=images/example.png&w=150" . 1) . '.timthumb.txt';
unlink($cachefile);

答案 1 :(得分:2)

我来到这个解决方案。我必须对timthumb.php做一些修改 文件所以我可以包含该文件并从另一个文件中实例化该类。

<强> timthumb.php:

<?php

// If this file is included from other script, don't start timthumb
if (basename($_SERVER['SCRIPT_NAME']) == basename(__FILE__)) {
  timthumb::start();
}

class timthumb {
  ...
  // $cachefile is protected so I create a getter function
  public function getCacheFile() {
    return $this->cachefile;
  }
}

现在我可以获取给定图像的缓存文件名并将其删除。代码不漂亮,但我需要节省空间。

<强> delete_cache.php:

<?php
require 'timthumb.php';

// Fake the query string
$_SERVER['QUERY_STRING'] = 'src=path/to/src/image.jpg&w=200&h=150';
parse_str($_SERVER['QUERY_STRING'], $_GET);

// When instantiated, timthumb will generate some properties: 
// salt, directories, cachefile, etc.
$t = new timthumb();

// Get the cache file name
$f = $t->getCacheFile();

// Delete the file
if (file_exists($f)) {
    unlink($f);
}