0

写真共有アプリがあり、timthumbを使用してサムネイルを表示しています。ユーザーが写真を削除すると、容量を節約するためにキャッシュされた画像も timthumb のキャッシュ ディレクトリから削除されます。現在、キャッシュからすべてのファイルを削除することしかできませんが、理想的とは言えません。

元の画像を指定して、timthumb のキャッシュから特定のファイルのみを削除する方法は?

4

2 に答える 2

3

ローカルイメージのキャッシュファイルを削除したいとします。

最初に必要なのはcacheDirectory= './cache'
で、次にFILE_CACHE_PREFIX = 'timthumb'
であり、内部(_int_)
であり、次のmd5ハッシュがあります。

  • timthumb.phpの変更時間
  • char'-'
  • timthumb.phpのiノード
  • 画像の修正時間
  • 画像を呼び出すときの$_SERVER['QUERY_STRING']
  • 常にnubmerである「fileCacheVersion」 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);
于 2012-10-16T01:11:40.080 に答える
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);
}
于 2012-08-11T02:08:38.213 に答える