Вводная часть:
На сайте есть возможность добавления любого количества фотографий к товару. Все сохранятеся по заданному пути, приводится к максимально допустимому размеру и желаемому качеству.
После того, как товар создан и сохранен, его можно просматривать и на этой странице фотографии отображаются с конкретными размерами. Более того, как показывает практика, дизайн может меняться в любой момент и поэтому хардкодить размеры оновных фото и миниатюр не целесообразно.
Было принято решение хранить загруженные фотографии "как есть", а на сайте выводить обработанные (изменение размера, водный знак, получение миниатрю) "на лету". Таким образом, если поменяется дизайн, то нужно просто-напросто задать новые параметры для этого преобразования.
Реализация:
Есть контроллер, который парсит URL и в зависимости от переданных параметров производит нужные преобразования через модель. Если URL не содержит параметров преобразования, то отдается оригинал изображения, если определены преобразования, то отдается преобразованное изображение:
Код: Выделить всё
$ext = pathinfo($file)['extension'];
if (file_exists($file)) {
// return original
return Imagine::getImagine()
->open($file)
->show($ext, []);
}
preg_match("/(.*)_(\d+)x(\d+)\.{$ext}/", $file, $matches);
if (is_array($matches) && count($matches)) {
if (!file_exists("{$matches[1]}.{$ext}")) {
throw new NotFoundHttpException("Image doen't exist!");
}
$options = array(
'resolution-units' => ImageInterface::RESOLUTION_PIXELSPERINCH,
'resolution-x' => $matches[2],
'resolution-y' => $matches[3],
'jpeg_quality' => 100,
);
return Imagine::resize("{$matches[1]}.{$ext}", $matches[2], $matches[3])
->show($ext, $options);
} else {
throw new NotFoundHttpException('Wrong URL params!');
}
Вопрос:
При такой схеме броузер не имеет прямого доступа к изображениям. Т.е. все запросы ведут на специальный контроллер, который отдает содержимое файлов. Но сами файлы по-факту находятся вообще в другом месте и к ним имеет доступ только контроллер.
Насколько это все ресурсоемко и загружает сервер?
Если переделывать алгоритм на сохранение изображений в спец. директории и редиректе броузера на это изображение, то как SEO и время загрузки страницы отреагирует на эти редиректы?
Может я что-то не знаю и существует "старая проверенная" практика решения подобных задачь? Просветите?