Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP, MySql Как и где хранить изображения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
vanya_sl
Отправлено: 23 Ноября, 2013 - 17:36:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Здравствуйте.
Нужно решить такую ​​задачу:
Создал таблицу в БД с такими полями:
- category_id
- category_name
- category_img
- category_description

Мне нужно что бы в админке пользователь все вводил, а на сайте на какой-то странице это все выводилось.
С текстовыми полями проблем при записи и выводе нет.
НО Как быть с изображением? Ведь хранить их в поле БД не совсем корректно...
Спасибо.
 
 Top
dXdYdZ
Отправлено: 23 Ноября, 2013 - 17:40:48
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




Здравствуйте. Изображения можно хранить в отдельной папке с уникальными именами файлов, а в БД хранить только пути (или даже только имена файлов) к ним.
 
 Top
teddy
Отправлено: 23 Ноября, 2013 - 17:41:55
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




храните в папке а название файла в БД, и по запросу уже вытягивайте нужное название файла и потом по этому названию дергайте из папки картинку
 
 Top
vanya_sl
Отправлено: 23 Ноября, 2013 - 17:42:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




dXdYdZ пишет:
Здравствуйте. Изображения можно хранить в отдельной папке с уникальными именами файлов, а в БД хранить только пути (или даже только имена файлов) к ним.

Ну я так и думал. А как правильно будет это сделать? Записать в папку а затем выводить?
 
 Top
Deonis
Отправлено: 23 Ноября, 2013 - 17:44:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




vanya_sl пишет:
хранить их в поле БД
А разве кто-то запрещает их хранить на сервере? Сохраняйте изображение, переименовывая с привязкой по ID категории, а поле category_img в этом случае - становится вообще лишним.
 
 Top
vanya_sl
Отправлено: 23 Ноября, 2013 - 17:47:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Deonis пишет:
vanya_sl пишет:
хранить их в поле БД
А разве кто-то запрещает их хранить на сервере? Сохраняйте изображение, переименовывая с привязкой по ID категории, а поле category_img в этом случае - становится вообще лишним.


А можно код? (как записать в паку и вывод)
 
 Top
teddy
Отправлено: 23 Ноября, 2013 - 18:04:57
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




vanya_sl
Когда файл загружаете, при move_uploaded_file записывайте имя успешно загруженного файла в БД вашей и возможно укажите категорию(как у вас там по логике так и делайте). Повторюсь, имя файла, а не сам файл... а сами файлы храните в обычной папке

и когда будете принимать параметр(id либо категорию в зависимости от логики приложения)
дергайте название файла из БД который имеет отношение к этой категории/параметру.

а потом просто выводите
PHP:
скопировать код в буфер обмена
  1. echo '<img src="/images/$row[\'imagename\']">';

таким образом для каждого запроса можно подставить свою картинку...
 
 Top
Deonis
Отправлено: 23 Ноября, 2013 - 18:06:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Если записываете новую статью, то после запроса используете функцию mysql_insert_id или аналогичными, если используете PDO/MySQLi. Далее загружаете файл:
PHP:
скопировать код в буфер обмена
  1. // загрузка
  2. $cat_id = mysql_insert_id(); // !!! сразу после запроса
  3. $path = $_SERVER['DOCUMENT_ROOT'].'/cat_img/cat_'.$cat_id.'.jpg';
  4. if($_FILES['cat_img']['error'] == 0){
  5.     if(move_uploaded_file($_FILES['cat_img']['tmp_name'],$path)){
  6.         echo 'Файл успешно загружен!';
  7.     }
  8. }
  9. // Вывод:
  10. $path = '/cat_img/cat_'.$cat_id.'.jpg'; // $cat_id - получаете после выборки статьи из БД
  11. if(file_exists($_SERVER['DOCUMENT_ROOT'].$path)) {
  12.     echo '<img src="'.$path.'" alt="">';
  13. }
  14.  
Пример абстрактный, поэтому не забывайте, что его надо подкорректировать по себя/ К примеру, оставлять родные расширения файлов и т.д.

(Отредактировано автором: 23 Ноября, 2013 - 18:08:37)

 
 Top
_Dark_
Отправлено: 23 Ноября, 2013 - 18:09:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


Но можно хранить и в MySQL, как BLOB.
 
 Top
vanya_sl
Отправлено: 23 Ноября, 2013 - 18:12:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




_Dark_ пишет:
Но можно хранить и в MySQL, как BLOB.


Можно. А как выводить? Как обыкновенное поле?

Так выводит только название:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         $strSQL = "SELECT * FROM category LIMIT 15 ";
  4.         $rs = mysql_query($strSQL);
  5.         while($row = mysql_fetch_array($rs)) {
  6.  
  7.            echo  $row['category_id'] ;
  8.           echo  $row['category_name'] ;
  9.           echo  $row['category_img'] ;
  10.           echo  $row['category_description'] . "<br />";
  11.  
  12.           }
  13.         ?>
  14.  

(Отредактировано автором: 23 Ноября, 2013 - 18:13:50)

 
 Top
caballero
Отправлено: 23 Ноября, 2013 - 18:14:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
НО Как быть с изображением? Ведь хранить их в поле БД не совсем корректно..

а для чего по твоему существет тип BLOB?

хранить в Бд как раз удобнее чем синхронизировать с содержимым файловой системмы
(Добавление)
Цитата:
Так выводит только название:

ну так что задал то и выводит

выведи тег img а в него воткни путь к файлу


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
teddy
Отправлено: 23 Ноября, 2013 - 18:19:32
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




caballero
не ради поспорить а интересно просто, если картинок предположим 500 000 то блоб снова рульнее чем папка? он ж прожорливый вроде как, а такой объем информации хранить в БД как то не айс я думаю(ради картинок)... проще сделать CHAR(32) и генерить уникальный md5 для названия файла, а потом уже из папки тянуть картинку по названию

я например только папкой пользуюсь и норм вроде как...
 
 Top
Deonis
Отправлено: 23 Ноября, 2013 - 18:19:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




caballero пишет:
хранить в Бд как раз удобнее
Оно так, но если у ТС шаред-хостинг, то может и тормозить, т.к. файлы из БД будут подгружаться в память, которой на таком хосте и не так уж много выдают.
 
 Top
vanya_sl
Отправлено: 23 Ноября, 2013 - 18:21:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




caballero пишет:

выведи тег img а в него воткни путь к файлу


Можно кодом показать как?
 
 Top
_Dark_
Отправлено: 23 Ноября, 2013 - 18:28:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


Например:
CODE (html):
скопировать код в буфер обмена
  1. <img src="image_render.php?image_id=4" />


image_render.php:

// делаем запрос в БД на основе идентификатора запроса (image_id)
header("Content-Type: image/png"); // это изображение
echo $imageBlog; // отправляем то, что получено из БД.

Источник.

(Отредактировано автором: 23 Ноября, 2013 - 18:29:06)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB