Подмена img на сайте

Nikolaj

Новичок
Есть сайт, куда пользователи загружают свои фотографии - они могут делать их доступными всем или скрытыми.
Физически все JPG складываются в один большой каталог под именами типа "ue5wEgrCu2etSD2ye.jpg".
Каждый пользователь может задать своему файлу красивое имя типа "priroda_2012.jpg".

Реальное и желаемое имя хранятся в базе данных.
И при обращении к сайту по адресу типа "site.ru/avtor/foto1.jpg" в базе находится нужный файл и подставляется.
Сейчас это делается через "imagecreatefromjpeg" и "imagejpeg". Но нагрузка на сайт возросла и скрипты не справляются.

Вопрос: можно ли подменять рисунок (img src) другим способом (менее требовательным к ресурсам)?
Нужно что бы гость сайта никогда не видел реальное имя (ue5wEgrCu2etSD2ye.jpg), а видел только красивое (priroda_2012.jpg).
 

Nikolaj

Новичок
> что мешает их хранить под теми именами, под которыми загрузил пользователь
Пользователь может менять имена альбомов, и может переносить их из альбома в альбом - была "site.ru/avtor/album1/priroda.jpg" - стала "site.ru/avtor/album2/priroda.jpg".
Потом пользователи любят загружать фото с одинаковыми именами - просить каждый раз переименовать не хочется.
 

Фанат

oncle terrible
Команда форума
если на страницу выводится больше одной фотографии, то в пределах одного каталога все равно нельзя будет хранить файлы с одинаковыми именами.
при соблюдении требования "никогда не видел реальное имя".
то есть, самый простой вариант - это переименовывать файлы самому, добавляя цыферки.

а по исходному вопросу остаётся загадкой, зачем делать бессмысленную работу по превращению бинарной картинки в объект GD и обратно, вместо того, чтобы сразу выдать бинарную картинку в браузер, пусть даже и через пхп
 

Nikolaj

Новичок
Первоначально был скрипт для сайта, где на фото могли ставиться разные права доступа для разных людей - User_1 видел файл "/avtor/priroda.jpg", а User_2 - не видел (либо зарегистрированный пользователь видит файл, а гость по тому же адресу - не видит).
Новый сайт не предполагает такого функционала - прятать фото в зависимости от статуса гостя не нужно. Теперь просто - либо файл виден всем, либо никому.

Нужно что бы по красивому адресу "site.ru/avtor1/albom1/priroda1.jpg" выводилась картинка, которая лежит в совершенно другом каталоге (и посетитель не знал настоящего каталога и имени).
Как это лучше сделать?
 

Beavis

Banned
конечно ресурсов не хватит, если файлы прогонять через php)

попробуй модули веб-сервера типа этого
https://tn123.org/mod_xsendfile/

для nginx'а тоже есть что-то похожее
 

Nikolaj

Новичок
Спасибо.

Есть банальный путь решения: при создании альбома автором, физически создавать на сервере каталог; а при добавлении автором в альбом фотографии физически помещать копию файла с красивым именем в этот каталог.
Тогда на сервере будут реальные каталоги с реально существующими в них файлами. Соответственно, при изменении автором названия альбома или названия файлов - удалять старый и копировать новые файлы.
В этом случае php-скрипт будет работать только при выполнении автором каких-то действий. А при обращении гостей сайта вообще никаких скриптов не потребуется.

Может так и сделать?
 

Фанат

oncle terrible
Команда форума
Nikolaj
Делай, как хочешь.
Без бессмысленной генерации картинки каждый раз заново работать будет в любом варианте.
С выдачей картинки скриптом, конечно, помедленнее - но не смертельно.
 

Noodles

Новичок
Тело экшена который отдает картинку:
PHP:
$file = $model->getByAlias('priroda_2012.jpg');
header('Content-Disposition: attachment; filename="' . $file->name . '"');
readfile(FILES_DIRECTORY . '/' . $file->file_path);
 
Сверху