Хранение картинок
584 сообщения
#14 лет назад
Цитата ("frig"):Хранить таблицу с картинками имеет смысл, пожалуй, только если к ним надо подписи привязывать. Так ведь?
И если их много: картинок с подписями для одного объявления. Как я понимаю в доске, обычно до 10 картинок, да и то не уверен что столько надо. Можно и доп. информацию хранить в том же массиве. Завести в бд поле Text под это дело и вперед. Ограничение накладывается только при работе непосредственно с картинками и к примеру с комментированием их. Поиск и т.д. Но в доске объявлений не вижу смысла делать этот функционал. Как я понимаю,работа будет идти так: добавил объяву с картинками, она записалась как запись, и дальше уже эта запись используется в выборке.. При удалении редактировании, так же используется только одна запись, но эти функции не востребованы, т.е. больше будет выборки данных, поэтому есть смысл оптимизировать именно её.
52 сообщения
#14 лет назад
Цитата ("SField"):Цитата ("frig"):Хранить таблицу с картинками имеет смысл, пожалуй, только если к ним надо подписи привязывать. Так ведь?
И если их много: картинок с подписями для одного объявления. Как я понимаю в доске, обычно до 10 картинок, да и то не уверен что столько надо. Можно и доп. информацию хранить в том же массиве. Завести в бд поле Text под это дело и вперед. Ограничение накладывается только при работе непосредственно с картинками и к примеру с комментированием их. Поиск и т.д. Но в доске объявлений не вижу смысла делать этот функционал. Как я понимаю,работа будет идти так: добавил объяву с картинками, она записалась как запись, и дальше уже эта запись используется в выборке.. При удалении редактировании, так же используется только одна запись, но эти функции не востребованы, т.е. больше будет выборки данных, поэтому есть смысл оптимизировать именно её.
Да и особой нужды в заголовке к каждой картинки нет.
1649 сообщений
#14 лет назад
То есть хранить таблицу в одного поле в таком формате: 1.jpg#2.jpg#4.jpg#20.jpg и при выводе делать разбивку? Да, действительно тут комментарии к картинке не нужны. Всек картинки через скрипт конвертирую в JPG, там что думаю могу хранить просто 1#2#4#20. А сами имена файлов с картинками формировать так: OBJECTID_1.jpg, OBJECTID_2.jpg, OBJECTID_4.jpg, OBJECTID_20.jpg. А как лучше всего сделать когда картинку удаляем или добавляем новую?
52 сообщения
#14 лет назад
Пишем time().".jpg" и придумывать ничего не надо.
584 сообщения
#14 лет назад
Цитата ("WebDesignStudio"):То есть хранить таблицу в одного поле в таком формате: 1.jpg#2.jpg#4.jpg#20.jpg и при выводе делать разбивку? Да, действительно тут комментарии к картинке не нужны. Всек картинки через скрипт конвертирую в JPG, там что думаю могу хранить просто 1#2#4#20. А сами имена файлов с картинками формировать так: OBJECTID_1.jpg, OBJECTID_2.jpg, OBJECTID_4.jpg, OBJECTID_20.jpg. А как лучше всего сделать когда картинку удаляем или добавляем новую?
Не я думаю формлять картинки, типа:
$images = Array(
'1'=>'image1.jpg',
'2'=>'image2.jpg',
'3'=>'image3.jpg'
)
Перед заливкой в БД, делаем например: serialize($images), после получения unserialize($images)
Соответственно чтобы удалить, мы просто удаляем элемент массива:
if ( file_exists($images) ) {
if ( unlink($images) ) unset( $images );
} else unset( $images );
В таком варианте так же никто не мешает сделать такой массив:
$images = Array(
'1'=>Array('image'=>'image1.jpg', 'title'=>'Подпись фотографии 1'),
'2'=>Array('image'=>'image2.jpg', 'title'=>'Подпись фотографии 2'),
'3'=>Array('image'=>'image3.jpg', 'title'=>'Подпись фотографии 3')
)
А для превьюшки (та что выводится в списках) использовать отдельное поле в бд.
52 сообщения
#14 лет назад
Превьюшки должны генерироваться при загрузке картинок им не нужно отдельное поле к названию просто можно добавить преффикс.
584 сообщения
#14 лет назад
Цитата ("mishustin_s"):Пишем time().".jpg" и придумывать ничего не надо.
Не верно, а если онлайн скажем 10к человек. В таком случае правильно так md5(microtime()+advId+random()).jpg
Но лучше делать метку вроде
ToUrl(catName)_ToUrl(AdvName)-AdvId-ImageNumb.jpg
ToUrl - функция преобразования в правильный формат url
Тогда получим картинки с именем: Sell_Auto-Prodam_lexus-12-23.jpg
52 сообщения
#14 лет назад
Цитата ("SField"):Цитата ("mishustin_s"):Пишем time().".jpg" и придумывать ничего не надо.Не верно, а если онлайн скажем 10к человек
если у сайта будет тысячу хостов в день и то хорошо, а что хотябы два человека единовременно загрузят свои картинки вообще маловероятно
584 сообщения
#14 лет назад
Цитата ("mishustin_s"):Цитата ("SField"):Цитата ("mishustin_s"):Пишем time().".jpg" и придумывать ничего не надо.Не верно, а если онлайн скажем 10к человек
если у сайта будет тысячу хостов в день и то хорошо, а что хотябы два человека единовременно загрузят свои картинки вообще маловероятно
Все равно есть вероятность, что два человека запишут картинку с одинаковым именем, а это недопустимо.
52 сообщения
#14 лет назад
Цитата ("SField"):Цитата ("mishustin_s"):Цитата ("SField"):Цитата ("mishustin_s"):Пишем time().".jpg" и придумывать ничего не надо.Не верно, а если онлайн скажем 10к человек
если у сайта будет тысячу хостов в день и то хорошо, а что хотябы два человека единовременно загрузят свои картинки вообще маловероятно
Все равно есть вероятность, что два человека запишут картинку с одинаковым именем, а это недопустимо.
Ну так и при md5(microtime()) тоже есть такая вероятность а зачем тут md5? И нужно всё-таки microtime(1)
584 сообщения
#14 лет назад
Цитата ("mishustin_s"):Ну так и при md5(microtime()) тоже есть такая вероятность а зачем тут md5?
Я там не дописал, сообщение отредактировано..
Вероятность остается, но ничтожно малая, в любом случае проще делать, так как описано во втором варианте.
5330 сообщений
#14 лет назад
SField, id пользователя к картинке добавить можно, чтобы "одновременные пользователи" не мешали друг другу.
584 сообщения
#14 лет назад
Цитата ("ArtPro"):SField, id пользователя к картинке добавить можно, чтобы "одновременные пользователи" не мешали друг другу.
Согласен, вариантов много.
1649 сообщений
#14 лет назад
Цитата ("ArtPro"):id пользователя к картинке добавить можно
Не вариант. Объявления могут добавить и незарегистрированные пользователи.
52 сообщения
#14 лет назад
function codegen($len) {
$codestring = "";
$chars = "1234567890qwertyuiopasdfghjklzxcvbnm_";
for ($i = 0; $i < $len; ++$i) {
$codestring.= $chars;
}
return $codestring;
}
$fname = codegen(11).time().".jpg";
1649 сообщений
#14 лет назад
Ну как хранить в одно поле все, я уже сам подумаю. Получается это лучший вариант. А чем лучше serialize, unserialize по сравнению с explode, implode(хранение картинок в поле через разделители # например). Я всегда так делаю?
52 сообщения
#14 лет назад
Цитата ("WebDesignStudio"):Ну как хранить в одно поле все, я уже сам подумаю. Получается это лучший вариант. А чем лучше serialize, unserialize по сравнению с explode, implode(хранение картинок в поле через разделители # например). Я всегда так делаю?
Ничем. Оно даже медленнее работает при больших размерах данных, но так можно хранить ассоциативные и многомерные массивы.
1649 сообщений
#14 лет назад
Цитата ("mishustin_s"):но так можно хранить ассоциативные и многомерные массивы
С помощью explode - implode тоже можно.

52 сообщения
#14 лет назад
Цитата ("WebDesignStudio"):Цитата ("mishustin_s"):но так можно хранить ассоциативные и многомерные массивы
С помощью explode - implode тоже можно.Я даже делал. Не знал что есть serialize, unserialize.
Да ну! Пример? С помощью этих функций можно написать лишь аналоги функции serialize, да и то все равно медленее получится.
16382 сообщения
#14 лет назад
Цитата ("WebDesignStudio"):А чем лучше serialize, unserialize по сравнению с explode, implode(хранение картинок в поле через разделители # например). Я всегда так делаю?
Не надо морочить голову со складыванием сложных структур и их содержимым. Если в поле точно будут только цифры и подчеркивания, то преимуществ нет.
Цитата:
А сами имена файлов с картинками формировать так: OBJECTID_1.jpg, OBJECTID_2.jpg, OBJECTID_4.jpg, OBJECTID_20.jpg. А как лучше всего сделать когда картинку удаляем или добавляем новую?
Мне кажется что с формированием надо делать совсем просто - при запросе объявления проверяем есть ли картинки в поле или там местка что картинок нет. Если поле пустое, то генерируем его заново - проверяем через file_exists наличие файлов и складываем в поле. Соответственно все манипуляции по добавлению/удалению/редактированию сводятся к тому, что надо провести операции с файлами и очистить поле.