Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240

Как лучше хранить миниатюры

14.05.2016, 03:43. Показов 2020. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как стоит хранить миниатюры изображений в базе данных?

Варианта у меня три.
- Как и все остальные файлы, в той же таблице (в этой таблице есть поля type и data отвечающие за ассоциацию записи и можно указать например thumb_200 и id)

- Создать отдельную упрощённую таблицу thumbs вида id, size, original_id
- Добавлять постфикс к системному (уникальному) имени файла. Например name_thumb200, name_thumb600
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2016, 03:43
Ответы с готовыми решениями:

Как лучше хранить переписку?
В мускуле или текстовом файле? Хотя если переписку хранить в текстовом файле, то для навигации по переписке с определённым пользователем...

Как лучше хранить список системных файлов
Собственно вопрос в название темы. Ваше мнение ? Есть список фалов из которых собирается ярдо, подключаются системные классы Смотрим...

Как и где лучше хранить Мета теги
Привет всем. Кто знает где лучше хранить мета теги в бд или в отдельном php файле. Я имею ввиду по скорости, да и практичности. В общем кто...

12
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2016, 06:45
Я не понял -- миниатюры или их названия? Если названия, то достаточно одной таблицы, в которой есть имя оригинального изображения.
Сами миниатюры хранить в отдельной папке (thumbs) с точно таким же именем, как и у оригинала. Когда нужно вывести оригинал -- пишите так:
/путь/к/папке/имя изображения.
Когда надо вывести миниатюру -- пишите так:
/путь/к/папке/thumbs/имя изображения.

Где "имя изображения" -- значение из поля в базе.
1
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
14.05.2016, 13:25  [ТС]
Para bellum, а если мне нужна непредсказуемость пути к файлу?
Например только определённая группа (скажем vip) могут смотреть полную версию статьи и им нельзя подбирать адрес полноразмерной картинки. Как тогда лучше поступить?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.05.2016, 15:15
Ну, в таком случае, можно делать запрос не напрямую к картинке, а через php. Ну, вроде:
http://example.com/getimage?id=819647&type=thumb
А оригинал получать так:
http://example.com/getimage?id... e=original
В скрипте отдачи проверять, есть ли права для просмотра оригинала.
0
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
14.05.2016, 17:48  [ТС]
Para bellum, Нет нет. Я всегда формирую страницу по чистому html. Без дополнительных запросов.
Сразу отдаю url. Да и это не выход. Если человек понимает алгоритм работы, ему не составит труда модифицировать ссылку превьюшки убрав /thumb например.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
15.05.2016, 09:58
Цитата Сообщение от AlexBitard Посмотреть сообщение
Да и это не выход. Если человек понимает алгоритм работы, ему не составит труда модифицировать ссылку превьюшки убрав /thumb например.
Это выход. Я уже написал:
Цитата Сообщение от Para bellum Посмотреть сообщение
В скрипте отдачи проверять, есть ли права для просмотра оригинала.
0
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
15.05.2016, 11:45  [ТС]
Para bellum, это не имеет значения. Если человек получит ссылку на картинку, зная алгоритм он может получить доступ к её любой версии просто установив нужный размер, ведь все ссылки устроены одинаково.
Да и отдавать картинки php скриптом прошлый век и совсем не практично.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
15.05.2016, 12:16
Цитата Сообщение от AlexBitard Посмотреть сообщение
Если человек получит ссылку на картинку, зная алгоритм он может получить доступ к её любой версии просто установив нужный размер, ведь все ссылки устроены одинаково.
Да не сможет! Я же говорю, проверяйте, VIP запрашивает или не VIP:
PHP
1
2
if(!$is_vip)
    echo 'Ты не VIP, изображение не увидишь!';
Ссылки пусть будут хоть тыщу раз одинаковые -- никто не получит доступ, если сайт его ограничит.
Цитата Сообщение от AlexBitard Посмотреть сообщение
Да и отдавать картинки php скриптом прошлый век и совсем не практично.
Ну отдавайте NodeJS скриптом или Ruby-скриптом. Зачем тогда в разделе php вопрос задали?

Серверу до фонаря, кто у Вас там VIP, а кто обычный -- он отдаст картинку и всё. Поэтому отдавать картинку нужно с помощью ЯП.
0
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
15.05.2016, 15:58  [ТС]
Para bellum,
Очень смешное недопонимание.
Повторю, вдруг вы поймёте. Если я получил прямую ссылку на картинку любой версии, например site/img/thumb_micro/img.jpg, я смогу получить доступ к полной версии картинки так например: site/img/original/img.jpg

Вопрос только в том когда я получу ссылку на изображение.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
16.05.2016, 17:27
Цитата Сообщение от AlexBitard Посмотреть сообщение
Если я получил прямую ссылку на картинку любой версии, например site/img/thumb_micro/img.jpg, я смогу получить доступ к полной версии картинки так например: site/img/original/img.jpg
И я об этом же. Поэтому отдавайте картинку с помощью ЯП, с проверкой, может ли данный пользователь видеть её или нет. Других способов я не видел.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
16.05.2016, 17:57
Цитата Сообщение от AlexBitard Посмотреть сообщение
Если я получил прямую ссылку на картинку любой версии, например site/img/thumb_micro/img.jpg
Небольшой коммент о варианте Para bellum.

Вы закидываете картинки в хранилище, недоступное извне, например site.ru/private/images/0001.jpg, при этом закрыв доступ к папке, подпапкам и самим изображениям через файл .htaccess.

Далее если вам нужно показать картинку - используете ссылку, как показали выше:
HTML5
1
<img src="/getimage.php?id=819647&type=original" />
Ссылка ведёт на скрипт getimage.php, который проверяет авторизацию и либо показывает изображение, либо выдаёт ошибку.

Примерная логика скрипта:

PHP
1
2
3
4
if(isset($_COOKIE['admin']))
    readfile('/private/images/' . $_GET['id'] . '.jpg');
else
    die('Auth failed.');
Разумеется, помимо readfile нужно отдать правильные заголовки, чтобы браузер воспринял контент как картинку, а не код.

Подробней тут.

Цитата Сообщение от AlexBitard Посмотреть сообщение
Да и отдавать картинки php скриптом прошлый век и совсем не практично.
Насчёт прошлого века - неправда, насчёт практичности - зависит от задач, под вашу вполне подходит.
1
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
17.05.2016, 13:12  [ТС]
Jodah, а, хорошо. Так действительно всё сработает.
Ссылку не читал, но думаю там просто указано что в хедер стоит указывать тип jpg/png/gif...

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

Я озадачен лишь тем как хранить картинки. А отдаю я всегда честную прямую ссылку.
Что скажете? Как по вашему стоит хранить изображения?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
17.05.2016, 14:07
AlexBitard, вариантов очень много. Когда-то видел отличную статью на хабре по этой теме, жаль потом сколько не искал её, так и не удалось найти... там перечислялись распространённые способы организации картинок.

Лично я пока что пришёл к такому решению:

1. Оригиналы картинок храню вместе с другим скрытым от лишних глаз контентом, например в той же site.ru/private/images/. Это необязательно, но лично мне так проще делать бекапы, поскольку бекап кэшированных (уменьшенных) копий мне не нужен.

2. Кэшированные копии храню в следующем виде:
site.ru/images/products/106000/105040/105031_120x120.jpg

Т.е. беру id картинки, округляю до тысяч - это первая папка. Затем округляю до десятков - это вторая папка. Затем id картинки и размеры.

Когда изображений становится слишком много - приходится разбивать их на 2-3 уровня папок, поскольку иначе в каждой папке копится слишком большое количество изображений (тем более если нужно делать много копий разных размеров - кол-во картинок растёт с жуткой скоростью). Подобное разбиение на уровни позволяет упростить навигацию, да и меньше ресурсов таким образом съедается (в теории, на практике не проверял).

Изначально схема (в той статье, о которой писал выше) выглядела немного иначе - берётся md5 от id, и затем первые несколько символов представляют собой 1-ую папку, затем 2-ую и т.д., т.е. нечто вроде:

202cb962ac59075b964b07152d234b70 - md5 от картинки с id = 123
site.ru/images/20/2c/b962ac59075b964b07152d234b70.jpg - итоговый путь к картинке.

Разумеется, нужно смотреть на потенциальный объём картинок. Если всего их на сайте будет не больше 200-300 штук - можно сделать как предложил выше Para bellum, да и ваши варианты из 1-го сообщения тоже подойдут. Я считаю, однозначного решения здесь нет, нужно просто брать тот вариант, который больше нравится. И не является слишком простым или избыточным для конкретной задачи, конечно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2016, 14:07
Помогаю со студенческими работами здесь

Как лучше хранить значение главной аватарки?
Есть галерея изображений, при открытии фотографии(изображения) предлагается установить как главной &lt;input type=&quot;checkbox&quot;...

Как лучше хранить(шифровать) секьюрные данные в базе?
сабдж собственно. Если md5(), то как обратно разворачивать юзеру, в случае забывчивости или утери инфы....

Где лучше хранить информацию
Здравствуйте уважаемые форумчане. У меня есть числовой набор данных. При нажатии на submit какое то из этих чисел будет обновляться....

Где лучше хранить контент?
Предположим я создал сайт, который решил заполнять информацией и так далее... И всплыл вопрос, а как лучше хранить статьи, в базе или...

Где лучше хранить код отправки по email - в БД или файле?
Здравствуйте, сайт сделал мультиязычным, при отправке email html кода много, его где лучше хранить: в mySQL или файле локализации(*.php)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru