Помогите с кешированием картинок

Деймос
На сайте с 10.09.2008
Offline
138
531

Подскажите как сделать кеширование картинок, т.е. я загружаю на свой сайт скриншеты сайтов через:

<img src="http://open.thumbshots.org/image.pxf?url=http://site.ru">

Дак вот как их закешировать чтобы каждый раз не обращаться к серверу thumbshots, а например загружать рисунок из папки /cache-pic/.

Всем заранее спасибо!

ewg777
На сайте с 04.06.2007
Offline
225
#1
Деймос
На сайте с 10.09.2008
Offline
138
#2

Если честно, то разобраться не смог :-(

wdsg
На сайте с 09.02.2009
Offline
31
#3
Деймос:
Подскажите как сделать кеширование картинок, т.е. я загружаю на свой сайт скриншеты сайтов через:
<img src="http://open.thumbshots.org/image.pxf?url=http://site.ru">


Дак вот как их закешировать чтобы каждый раз не обращаться к серверу thumbshots, а например загружать рисунок из папки /cache-pic/.

Всем заранее спасибо!

Давайте попробуем сделать так:

Создаём файл, например thumb.php, в него помещаем

error_reporting(0);
if (!isset($_GET['url'])) {
// Делаем что-то если в запросе нет url, например отдаём тумбу-заглушку
}
$Cache = new THCache;
$Image = $Cache->get($_GET['url']);
header('Content-type: image/jpeg');
echo $Image;

final class THCache {
const CACHE_PATH = '/srv/www/htdocs/cache/'; // Это локальный путь кеша
public function get($URL) {
$Sign = md5($URL);
if (!file_exists(self::CACHE_PATH.$Sign)) { // Если в кеше ещё нет тумбы для данного $URL, генерим новый элемент кеша
$this->cache($URL);
}
return file_get_contents(self::CACHE_PATH.$Sign); // Возвращаем содержимое тумбы
}
private function cache($URL) {
$Img = file_get_contents('http://open.thumbshots.org/image.pxf?url='.$URL); // Получаем тумбу от thumbshots.org
// Пишем её в локальный кеш
$FH = fopen(self::CACHE_PATH.md5($URL), 'w');
flock($FH, LOCK_EX);
fwrite ($FH, $Img);
flock($FH, LOCK_UN);
fclose($FH);
}
}

Все обращения, вроде

<img src="http://open.thumbshots.org/image.pxf?url=http://site.ru">

меняем на

<img src="http://mysite.ru/thumb.php?url=http://site.ru">

Сразу оговорюсь, что возникнет несколько мелких проблем. Например, если тумбы для определённого URL у thumbshots.org нет, то он, если мне не изменяет память, возвращает пустой png. Кроме того, тумбы для http://site.ru и site.ru будут разные (два разных файла в кеше). Необходимо проверять URL-адрес на "http://" в начале и "/" в конце. В общем, каркас есть, допиливание уже за Вами.

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
Деймос
На сайте с 10.09.2008
Offline
138
#4

Огромное спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий