Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Алгоритм работы с изображениями


Автор: insy 15.7.2009, 18:13
Народ, не могли бы вы подробнее рассказать как работать с изображениями в бд...
Я знаю, что в базе должны храниться только ссылки а сами изображения в папке... мне интересно именно как это работает и по возможности примеры...

Заранее благодарю!

Автор: Ипатьев 15.7.2009, 18:34
Да, в общем-то, и ссылки совсем не обязательно.
Вообще, не очень понятен вопрос. Все зависит от конкретной задачи. 

Автор: insy 15.7.2009, 18:42
Например у нас есть пользователь, который хочет поставить на аватар собственное изображение.Как нам лучше это реализовать.
Пользователь отправляет изображение, что происходит дальше... Заносить сразу в базу, или в базу заносить только ссылку... 

Автор: Ипатьев 15.7.2009, 18:53
Во-первых, оставь идею "заносить сразу в базу". Картинке в базе делать ну совсем нечего. База данных у нас реляционная. То есть, служит для хранения данных, которые мы можем каким-либо образом связывать между собой - складывать суммы, сортировать названия, искать тексты, группировать признаки. Ничего из этого с картинкой сделать нельзя. 
Картинку, лежащую на диске, вебсервер покажет в браузер сам, без начего участия. Чтобы показать картинку, лежащую в базе, придется писать отдельную программу, увеличивая нагрузку на сервер. На пустом, заметим, месте - картинка в базе нам никакой вообще пользу не приносит. 

Я бы в базу в этом случае не заносил вообще ничего.
Во-первых, оригинальное имя картинки нас никак не интересует.
Во-вторых, у нас наверняка есть уникальный id пользователя. 
В-третьих, аватар может быть только один. 
Следовательно, если сохранить картинку с именем, скажем, 234512.jpg, где имя совпадает с id, то сформировать ссылку можно будет автоматически. Расширение можно ставить любое, поскольку все браузеры, насколько я помню, различают картинки по формату, а не по расширению. 

Автор: Ипатьев 15.7.2009, 19:24
Но вообще-то, база данных - дело десятое.
Сначала надо научиться просто принимать файлы от пользователя. 

Автор: nezabor 15.7.2009, 20:18
а если аватарок больше то тогдым как, да и переносить данные(пользователей) на другой сервер будет проще

Автор: pd107 15.7.2009, 21:03
insy, я никогда так не делал, если не ошибаюсь, примерно так:

загрузка в базу:
Код

mysql_query('INSERT INTO `table` (`img`, `img_id`) VALUES (LOAD_FILE("/patch/to/file.jpg"), 123)');


вывод:
Код

$res = mysql_query('SELECT `img` FROM `table` WHERE `img_id`=123');
$i = mysql_fetch_array($res);
header('Content-type: image/jpeg');
echo $i['img'];


по идее примерно так

Ипатьев, не о том спрашивали

Автор: nezabor 15.7.2009, 21:05
а чтобы уникальные имена делались подскажешь

Автор: bars80080 15.7.2009, 22:46
Цитата(pd107 @  15.7.2009,  21:03 Найти цитируемый пост)
не о том спрашивали

спрашивали не о том, но судя по вопросу надо вначале уяснить базовые понятия

Автор: pd107 15.7.2009, 22:53
nezabor, http://ua.php.net/tempnam

Автор: Ипатьев 16.7.2009, 08:13
pd107, спасибо, я сам разберусь, о чем прашивали, а о чем - нет.

Автор: insy 16.7.2009, 08:42
Все конечно замечательно, но не могли бы вы привести пример(Добавления изображения пользоваетелем при хранении в базе только ссылки на изображение )

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

Автор: Ипатьев 16.7.2009, 08:53
insy, если ты умеешь работать с базой данных, то какая проблема записать в нее имя файла? Имя файла - это просто строка. Как имя пользователя. Имя пользователя ты можешь записать в базу данных? Если нет, то тебе надо учиться работать не с файлами, а с бадой данных. Если да - то в чем проблема записать в базу данных строку? 

Автор: insy 16.7.2009, 09:10
имя файла записать не проблема, но вот как сделать, чтобы по этому имени потом определялось изображение... Я не пойму именно как их связать... чтобы на сервер отправлялась картинка, а ссылка на нее хранилась в базе... и по ссылке мы в дальнейшем извлекали картинку...

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

Автор: bars80080 16.7.2009, 09:25
insy, ну тебе же объяснили. задача разбивается на совершенно независимые этапы:

1. загрузка файла на сервер
2. запись имени в БД

ты первое можешь сделать?

Автор: Ипатьев 16.7.2009, 09:27
Не надо ничего "извлекать". Зачем что-то извлекать? 
Картинка у тебя лежит на сервере, вместе с остальными. Про шапку сайта у тебя не возникает вопросов, как ее извлечь?
Все, что тебе надо - это вывести тег img src, в который подставить каталог и имя картинки. каталог тебе должен быть известен - ты в него записывал. имя картинки ты говоришь записать в базу не проблема. Соединяешь их вместе и получаешь искомую "ссылку". Я не понимаю, что вызывает у тебя затруднения.

Автор: Ипатьев 16.7.2009, 12:24
Тут, наверное, надо более конкретно.
Какую ссылку ты хочешь положить в базу? Приведи пример ссылки.

Автор: insy 16.7.2009, 14:43
Разобрался сам, спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)