[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пути для хранения фото.С каким слешом?
Страницы: 1, 2
Гость_игорь
Всем доброго дня.

В каком виде лучше хранить путь к картинке в базе данных, с / или \ слешом.
По умолчанию у меня путь к папке изображения прописан так
DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'img_cont'.DIRECTORY_SEPARATOR.

Это дело на локальном компе формирует адрес к картинке \views\img_cont\далее имя картинки.
Но для вывода на веб страницу этот путь не работает.Поэтому приходится адрес переделывать
str_replace('\\','/' ,$filename);и потом выводить в виде /views/img_cont/далее имя картинки

Вопрос - какой путь лучше хранить в базе данных ?
curious
храни не путь, а название картинки, без расширения...А при выводе подставляй переменную....Ну что то типа /views/img_cont/$row['img_src'].jpg
я так делаю...
dron4ik
Цитата (curious @ 14.01.2013 - 14:30)
храни не путь, а название картинки, без расширения...А при выводе подставляй переменную....Ну что то типа /views/img_cont/$row['img_src'].jpg
я так делаю...

я так когда-то делал...
не советую... когда картинок станет много, хранилище придется разделять... и будут проблемы

зы"/"

_____________
Ex3m.com.ua — Активный образ жизни
curious
Цитата
не советую... когда картинок станет много, хранилище придется разделять... и будут проблемы


Можно подробнее...не понял если честно..
dron4ik
Цитата (curious @ 14.01.2013 - 14:42)
Цитата
не советую... когда картинок станет много, хранилище придется разделять... и будут проблемы


Можно подробнее...не понял если честно..

ну смотри, есть папка /images/ которая хранит все твои фото, в базу ты вносишь m1, m2, m3

на выходе как уже и сам писал берешь переменную с базы с именем картинки $img=$row[img]

и для вывода проводишь следующее <img src="/images/<?=$img?>.jpg"> (хот что это jpg нужно доказать)

и если у тебя 10-20 картинок то все пучком, и база меньше, и красиво смотрится


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

и ты заливаешь туда свои фоточки ничего не страшась, как, бам, и update нету.... все, ресурсы исчерпал... часто бывает что filezilla даже отказывается там что-то делать...

для этого мы и должны хранить путь, можно не полный... допустим $img="/2013/1/img.jpg", а выводить и физически хранить <img src="/images/<?=$img?>.jpg">

_____________
Ex3m.com.ua — Активный образ жизни
Nikitian
Для уникальности файлов генерите имя как, например, md5-хэш от содержимого. У вас поулчается 32 символа в стороком представлении хэша. Это имя и храните в базе. А на диске формируете путь для сохранения например так: /uploads/{первые 3 символа имени}/{вторые 3 символа имени}/{..ну вы поняли, до исчерпания паранойи..}/{имя} Всё аккуратно раскидывается по папочкам, в каждой директории не особо много поддиректорий получается даже при очень большом количестве файлов. Конечный адрес легко можно получить, зная лишь имя.
Joker
а мы последовательность юзаем для названий (типа автоинкримент в мускуле) и в любой момент можно разложить на папки и не парится, вот этот форум вообще папку вычисляет из имени.

кароче Nikitian все правильно сказал)
curious
Цитата
(хот что это jpg нужно доказать)

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

Про это я не знал, да я еще много чего не знаю)
Цитата
Для уникальности файлов генерите имя как, например, md5-хэш от содержимого.

Ну я использую для этого функцию rand() без параметров...(ну когда картинка заливается через админку..)

Цитата
У вас поулчается 32 символа в стороком представлении хэша. Это имя и храните в базе. А на диске формируете путь для сохранения например так: /uploads/{первые 3 символа имени}/{вторые 3 символа имени}/{..ну вы поняли, до исчерпания паранойи..}/{имя} Всё аккуратно раскидывается по папочкам, в каждой директории не особо много поддиректорий получается даже при очень большом количестве файлов. Конечный адрес легко можно получить, зная лишь имя.

А вот про это я не понял...Ну допустим формируем мы путь /uploads/{первые 3 символа имени}/{вторые 3 символа имени}/{имя}..По идее хэш всегда разный и получается что по этому пути будет храниться только одна картинка...А мне допустим надо чтобы к товару, были прикреплены дополнительные фото. В общем я что то не догоняю как мне по этому пути сохранить 99 фоток, а не 100(т.к. у нас ограничение).
Как я примерно понимаю в таблице нужно будет поле которое будет, скажем так, идентифицировать наши группы картинок хранящиеся в своих папках....

Ох..надеюсь вы поняли меня, объясняльщик я еще тот)

dron4ik
Цитата (curious @ 15.01.2013 - 07:24)
как мне по этому пути сохранить 99 фоток, а не 100(т.к. у нас ограничение).

а не нужно все хранить в одном месте... и там лимит не в 100(я утрировал), а у мирохоста(если не ошибаюсь) 3 000...

можно на крайняк брать ИД товара как имя директории... варианктов масса... но как по мне лучше сразу хранить полный путь к картинке если в перспективе сайт будет расширяться и возможно раскинется на несколько серверов...

_____________
Ex3m.com.ua — Активный образ жизни
Joker
Цитата (dron4ik @ 15.01.2013 - 15:38)
но как по мне лучше сразу хранить полный путь к картинке если в перспективе сайт будет расширяться и возможно раскинется на несколько серверов...

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


Предствте у вас есть картинка (не важно от куда) 12345.jpg

и пусть к ней:

domen.ru/images/12345.jpg

если вдруг наткнетесь на ограничение хостера по кол-во файлов в папке (вообще я бы стразу послал хостера и переехал) то храня весь путь "/images/12345.jpg" придется изменять данные в бд (да это можно скриптом сделать но зачем????). можно просто написать скриптик который разнесет по папкам (это делать придется в любом случае хоть храни путь хоть не храни) а после изменить функцию генерации полного пути до картинки.

но тут нам понадобилось сделать чтобы возможность ресайза картинок.

в итоге получится такая уже структура:

domer.ru/images/original/12345.jpg
domer.ru/images/100x100/12345.jpg
domer.ru/images/200x200/12345.jpg

и уже пути опять поменяються это раз! а во вторых чтоб из в пути в шаблоне изменить размер отображаемой картинки парсить и менять опять зачем?

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

если бы пришло название то все просто нужная и папка и вуаля!


у нас во всех проектах есть функция такой

/**
* в этих константах настройки, которые все хранят где хотят и как хотя xD)
* IMAGE_DIR - путь до папки с тумбами картинок относительно корня
* IMAGE_URL - ссылка относительно домена до папки с картинками
* URL_ROOT - сам домен
* DIR_ROOT - корень проекта
*
* всегда и везде есть в конфе слеш.
*
*/

function image_url($name,$size = '150x150')
{
echo image_url_return($name,$size);
}

function image_url_return($name,$size = '150x150')
{
$path = DIR_ROOT . IMAGE_DIR . $size . DIRECTORY_SEPARATOR . $name;

if (file_exists($path))
{
return URL_ROOT . IMAGE_URL . $size . '/' . $name;
}
else
{
return URL_ROOT . IMAGE_URL . $size . '/none.jpg';
}
}


правда название картинок у нас всегда цифровое) поэтому в каждом ресайзе лежит картинка если вдруг попытка отобразить какую не существующую)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.