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.SU

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


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

> Описание: Неправильно загружается изображение из БД в браузер
ins1der12111991
Отправлено: 20 Июня, 2015 - 22:40:36
Post Id



Новичок


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


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




Неправильно загружается изображение из БД в браузер. Подскажите, пожалуйста, как можно это исправить.

PHP:
скопировать код в буфер обмена
  1.  
  2. //show_image.php
  3. require_once "../my_scripts/app_config.php";
  4. require_once "../my_scripts/database_connection.php";
  5.  
  6. try {
  7. if(!isset($_REQUEST['image_id'])) {
  8.         handle_error("not indicated image to download");
  9. }
  10. $image_id = $_REQUEST['image_id'];
  11.  
  12. $select_query = sprintf ("select * from images where image_id = %d", $image_id);
  13.  
  14. $result = mysqli_query($link, $select_query);
  15.  
  16. if(mysqli_num_rows($result) == 0) {
  17.         handle_error("not find this picture", "not find picture with id " . $image_id);
  18. }
  19. $image = mysqli_fetch_array($result);
  20.  
  21. header ('Content-type: ' . $image['mime_type']);
  22. header ('Content-length: ' . $image['file_size']);
  23. echo $image['image_data'];
  24. }
  25. catch (Exception $exc) {
  26.         handle_error ("When you upload your image there was an error", "Error in upload: " . $exc->getMessage());
  27. }
  28.  


Насколько я понял, можно вывести без проблем через <img src=... />, но какой путь вставлять в src? Изображение должно храниться непосредственно в БД.

(Отредактировано автором: 22 Июня, 2015 - 12:24:19)

 
 Top
Viper
Отправлено: 21 Июня, 2015 - 00:03:08
Post Id



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


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


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="data:image/jpeg;base64,изображение" />

где изображение это содержимое $image['image_data'] кодированное в base64.

(Отредактировано автором: 21 Июня, 2015 - 00:03:23)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DeepVarvar Супермодератор
Отправлено: 21 Июня, 2015 - 00:11:14
Post Id



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


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


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




Вайп ты що?

ТС, картинки бинарщиной лежат же, да? Ну тогда и пили отдельный контроллер, ну или (судя по твоему коду) файл, типа такого:
CODE (html):
скопировать код в буфер обмена
  1. <img src="/image.php?id=12345">

А в самом скрипте тащи бинарщину и выводи в тело ответа.
Еще можешь через ЧПУ сокрыть что это пхпшный файл.
Делов то.

А, ТС, у тебя там SQL-инъекции во все поля ))
 
 Top
Viper
Отправлено: 21 Июня, 2015 - 08:21:10
Post Id



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


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


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




DeepVarvar пишет:
Вайп ты що?
исходя из
ins1der12111991 пишет:
загружается изображение из БД в браузер
я понял что оно прямо в БД, а не как ссылка. Нужно уточнение.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
ins1der12111991
Отправлено: 22 Июня, 2015 - 11:39:41
Post Id



Новичок


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


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




"картинки бинарщиной лежат же, да?" - Да
(Добавление)
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <img src="show_image.php?image_id=<?php echo $image_id; ?>" />
  3.  

Пробовал и через php-сценарий и через <img src=...> вывести, безрезультатно.
Проблема в том, что show_image.php не возвращает (или неправильно возвращает) изображение из БД, но не могу найти в чём конкретно ошибка.

(Отредактировано автором: 22 Июня, 2015 - 12:26:04)

 
 Top
Мелкий Супермодератор
Отправлено: 22 Июня, 2015 - 12:36:13
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




ins1der12111991 пишет:
Проблема в том, что show_image.php не возвращает (или неправильно возвращает) изображение из БД, но не могу найти в чём конкретно ошибка.

С гипотезой согласен. Что скрипт-то возвращает? Доходит ли дело до вывода бинарника? Никто ничего в stdout к тому времени не нагадил?


-----
PostgreSQL DBA
 
 Top
ins1der12111991
Отправлено: 22 Июня, 2015 - 17:59:59
Post Id



Новичок


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


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




До вывода бинарника доходит, если убираю header-ы, то его(бинарник) выводит. Нашёл информацию, что может повлиять на неправильный вывод даже символ где-то в пределах show_image.php или добавление служебного символа блокнотом при сохранении скрипта. Так что я решил не морочить голову и всегда хранить в БД только путь к файлу, но не сам файл.
 
 Top
caballero
Отправлено: 22 Июня, 2015 - 20:45:37
Post Id


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


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


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




ins1der12111991
хранение в Бд имеет ряд преимуществ. В первую очередь не надо синхронизировать записи в Бд с файловой системой. и бакапировать проще. Плюс при необходимости проще разделять права доступа к изображениям

проблема в кривом коде с show_image.php а не в месте хранения.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Viper
Отправлено: 22 Июня, 2015 - 20:58:23
Post Id



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


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


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




caballero пишет:
хранение в Бд имеет ряд преимуществ.
эти преимущества заканчиваются на больших изображениях и БД как на дрожжах...

ins1der12111991 блокнота? Возьмите хотя бы Notepad++ и пересохраните скрипты в UTF8 без BOM.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
LIME
Отправлено: 22 Июня, 2015 - 21:03:08
Post Id


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


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


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




caballero только еще надо уметь готовить
Не?
Джойны с текстами и блобами выливаются в сохранение результирующих таблиц на диске если в выборке эти поля есть
В мускуле по крайней мере
Тогда лучше их делать отдельно
Отдельной таблицей
И брать по нужде
Не?
(Добавление)
Viper пишет:
эти преимущества заканчиваются на больших изображениях и БД как на дрожжах...
ага
И выбирать лучше отключая кэш если их много
Тогда лучше уж отдавать это дело фс
Короче неоднозначно...смотреть по ситуации
 
 Top
caballero
Отправлено: 22 Июня, 2015 - 22:01:13
Post Id


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


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


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




Цитата:
Тогда лучше их делать отдельно
Отдельной таблицей
И брать по нужде
Не?

именно так - блобы в отдельной таблице
соответствено никакие джойны не с нужны - когда уже надо тянуть картинку обращение по ключу к конкретной записи


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LIME
Отправлено: 22 Июня, 2015 - 22:06:57
Post Id


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


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


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




caballero ииии...sql_no_cache...тогда готов согласиться что иногда это есть скорее хорошо
Ну когда скриптом отдавать хотябэ...хотя тут еще вопрос масштабируемости...но думаю это тот случай когда можно не учитывать...кто этим заморачивается сам знает что делатьУлыбка
(Добавление)
Но тогда может лучше дисковый кэш заюзать? Ооой....незнаю незнаю
Для сайтиков может и проще а вообще....скорее нет
 
 Top
ins1der12111991
Отправлено: 22 Июня, 2015 - 22:20:20
Post Id



Новичок


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


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




Viper пишет:
Возьмите хотя бы Notepad++ и пересохраните скрипты в UTF8 без BOM.

Спасибо за совет, не знал.
 
 Top
LIME
Отправлено: 22 Июня, 2015 - 22:21:28
Post Id


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


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


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




http://www.php.su/forum/topic.ph...1&topic=3026
(Добавление)
LIME пишет:
sql_no_cache
поясню
Дело в том что если мускул будет кэшировать запросы картинок то много времени займет на последовательное выделение маленьких страниц кэша на большой файл
А если страницы кэша сделать покрупнее то для других данных будет много потерь в пустых областях этих самых страниц
Короче тут либо медленное выделение мелких областей либо потеря памяти на крупных областях
И жуткая дефрагментация докучи
Короче я скорее против чем за
Плюсы это только когда не особо важно быстродействие и ресурсы
Короче кабалеро....передумай так делать кроме простых сайтиковУлыбкаУлыбка
Не?
(Добавление)
Ииии...масштабирууууемооостьУлыбкаУлыбка татааам!!!
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Июня, 2015 - 00:11:52
Post Id



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


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


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




Сделать отдельную БД для бинарщины. Настроить спецефично, и тупо держать ленивый коннект в приложении для тех мест где оно понадобится.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB