Кеширование ескизов, как лучше отдавать картинку (readfile / location: )

jeno

Новичок
Кеширование ескизов, как лучше отдавать картинку (readfile / location: )

Добрый день.

У меня на сайте динамически создаются эскизы картинок.

те.например,я захожу по такой ссылке (rewrite): /thumb/blabla.jpg

выполняется РНР код, который сначала смотрит в папку thumbs_cache, если в папке нет уменьшеной картинки blabla.jpg, скрипт создает ее...а в конце выдает картинку.

так вот, выдавать картинку можно 2 способами (по крайней мере я знаю 2):
1.readfile (тупо считываем и выдаем каждый раз код картинки, что по моему мнению нагружает сервер)
2.header("Location: ..."); перенаправляем на картинку из кеша...огромный минус в том что картинки не кешируються браузером ( + всетаки перенаправлять мне не нравится хотя бы потому что видно папку с кешем, хотелось бы закрыть папку с кешем для просмотра из веба.

может есть какие-то другие варианты?

Заранее спасибо!
 

StUV

Rotaredom
перенес в "все-все-все", т.к. "в поиске" есть до... ответов по вопросу
желающие могут продублировать сюда
 

dimagolov

Новичок
что мешает тем же rewrite в начале преобразовывать запрос к тумбочке в запрос к папке кеша, а потом, при отсутствии файла (что определяется следующим правилом rewrit-а) отправлять на скрипт генерации, который опять будет делать переадресацию на оригинальный линк, но при запросе браузером картинка уже будет в наличии?
 

Alexandre

PHPПенсионер
У меня на сайте динамически создаются эскизы картинок.
а можно с этого место и по подробнее?
откуда берутся картинки?
почему требуется кеширование?
почему изначально нет уменьшенной копии картинки?

мое мнение:
Картинки нужно отдавать статикой, чтоб лишний раз не нагружать
сервер
 

С.

Продвинутый новичок
Не надо никакой rewrite. Достаточно отлавливать 404 ошибку в директории, предназначенной для тумбов.

-~{}~ 28.07.09 20:54:

Кстати, эта же хрень может выдавать дефолтный тумбнейл, если вдруг какая непонятка возникла.
 

dimagolov

Новичок
С., сам со свом костылем 404 страдай, если нету времени понять чем он плох. а другим свою глупость не советуй.
 

Alexandre

PHPПенсионер
dimagolov & С.
а мне кажется, что вообще не надо допускать 404
просто что-то у топикстартера с алгоритимом (логикой) не в порядке...
я пытаюсь это выяснить.
 

dimagolov

Новичок
Alexandre, ТС хочет делать генерацию тумбочки по запросу и ее сохранение для последующей отдачи в виде статики. это все (включая отдачу результата в виде статики) можно решить через mod_rewrite, как я уже писал. про 404 я и не писал, просто очень удобно для этой задачи в mod_rewrite использовать CondPattern '-f' или '-s'

вопрос о том насколько оправдано генерить тумбочку по запросу, а не в момент публикации оставим на совести ТС.
 

zerkms

TDD infected
Команда форума
а я привык делать проще :)

<img src="{$image->getThumbnail(23, 42)}" />
м? :)
 

dimagolov

Новичок
zerkms, а если клиент это поисковый бот, которому картинки нафиг не нужны? кроме того это потенциально тормозит отдачу страницы, при том что сами тубмочки не обязательны, чтобы отобразить страницу (например текстовку) и могут быть построены с существенной задержкой. проще при таком подходе тумбочки делать при публикации основной картинки.
 

zerkms

TDD infected
Команда форума
тормозит первую отдачу, да. но зато генерация отложена и не зависит от логики приложения (т.к. дёргается в шаблоне).
 

С.

Продвинутый новичок
dimagolov, искренне уверен, что варинат с 404 самый оптимальный, поскольку после петвого обращения и генерации картинки автоматически переходит в режим полной статики, не задействуя динамику вообще никаким боком. Будь ласков, поясни, что тут не так?
 

zerkms

TDD infected
Команда форума
С.
можно ещё модреврайт :) куда более элегантное решение.
 

Wicked

Новичок
по-моему вопрос стоял в том, что если мы только что скриптом сгенерили картинку, то как ее отдавать. Если картинка маленькая, то лично мне было бы пофиг. Если большая, то в идеале "X-Accel-Redirect:"
 

С.

Продвинутый новичок
Люди добрые, не мучайте старого человека! Объясните, в чем модрерайт элегантнее 404 или 404 костыльнее? Модрерайт отрабатывает при каждом обращении к картинке, а 404 только однажды. В чем грех?
 

Фанат

oncle terrible
Команда форума
С. да ни разу

-~{}~ 29.07.09 08:37:

использовать CondPattern '-f' или '-s'
 

С.

Продвинутый новичок
Вы не представляете, как трудно жить с длинной шеей. До меня все еще не дошло. Модрерайт все равно подключается каждый раз и делает проверку хоть с какими ключами.
 

Фанат

oncle terrible
Команда форума
А, ты об этом. Тогда да. Рерайт - каждый. Сайт упадет непременно.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Объясните, в чем модрерайт элегантнее 404 или 404 костыльнее?
При таком способе нельзя постить содержимое формы на несуществующие псевдоурлы. И если в Апаче ведется лог 404-ых ошибок, то он будет забит.

Алсо, нельзя будет иметь 404 ошибки.

-~{}~ 29.07.09 12:13:

Кстати, стоит различать mod_rewrite исполненный в контексте конфига апача, и его же, исполненного в контексте каталога на базе .htaccess - второй вариант действительно внутри «костыльней» и потребляет сравнительно с первым случаем больше ресурсов. Но все еще - незначительно по сравнению с прочими нагрузками.

-~{}~ 29.07.09 12:39:

Что касается
Модрерайт все равно подключается каждый раз и делает проверку хоть с какими ключами.
надо просто отдавать корректные заголовки для кеширования на клиенте. Что кстати, с вариантом 404 тоже проблематично.
 

С.

Продвинутый новичок
При таком способе нельзя постить содержимое формы на несуществующие псевдоурлы.
флоппик, окстись! Какие формы? Мы говорим о запросе и выдаче тумбнейла. Там только одна 404 ошибка может быть. Ее, родимую, и ловим.

Похоже теперь моя очередь поаснять.

На странице:
Код:
...
<img srs="thumbnails/157463.jpg">
...
В апаче:
Код:
<Directory /thumbnails>
  ErrorDocument 404 /create_thumb.php
</Directory>
В code:
PHP:
<?
  $thumb= Getta_Fucking_Thubnail(SERVER['REDIRECT_URL']);
  $source= Finda_Bloody_Source($thumb);
  header('Content-type: image/jpeg');
  if (!file_exists($source))
  {
    $thumb= 'thumbnails/default.jpg';
  }
  else
  {
    $img= imagecreatefromjpeg($source);
    Resize_Bitch($img);
    imagejpeg($img, $thumb, 50);
  }
  readfile($thumb);
?>
-~{}~ 29.07.09 09:44:

Где тут неэлегантность и костыльность? Самое естественное и оптимальное решение.
 
Сверху