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
Форумы портала PHP.SU :: Версия для печати :: Загрузка изображения из БД
Форумы портала PHP.SU » » HTTP и PHP » Загрузка изображения из БД

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

1. ins1der12111991 - 20 Июня, 2015 - 22:40:36 - перейти к сообщению
Неправильно загружается изображение из БД в браузер. Подскажите, пожалуйста, как можно это исправить.

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? Изображение должно храниться непосредственно в БД.
2. Viper - 21 Июня, 2015 - 00:03:08 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="data:image/jpeg;base64,изображение" />

где изображение это содержимое $image['image_data'] кодированное в base64.
3. DeepVarvar - 21 Июня, 2015 - 00:11:14 - перейти к сообщению
Вайп ты що?

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

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

А, ТС, у тебя там SQL-инъекции во все поля ))
4. Viper - 21 Июня, 2015 - 08:21:10 - перейти к сообщению
DeepVarvar пишет:
Вайп ты що?
исходя из
ins1der12111991 пишет:
загружается изображение из БД в браузер
я понял что оно прямо в БД, а не как ссылка. Нужно уточнение.
5. ins1der12111991 - 22 Июня, 2015 - 11:39:41 - перейти к сообщению
"картинки бинарщиной лежат же, да?" - Да
(Добавление)
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <img src="show_image.php?image_id=<?php echo $image_id; ?>" />
  3.  

Пробовал и через php-сценарий и через <img src=...> вывести, безрезультатно.
Проблема в том, что show_image.php не возвращает (или неправильно возвращает) изображение из БД, но не могу найти в чём конкретно ошибка.
6. Мелкий - 22 Июня, 2015 - 12:36:13 - перейти к сообщению
ins1der12111991 пишет:
Проблема в том, что show_image.php не возвращает (или неправильно возвращает) изображение из БД, но не могу найти в чём конкретно ошибка.

С гипотезой согласен. Что скрипт-то возвращает? Доходит ли дело до вывода бинарника? Никто ничего в stdout к тому времени не нагадил?
7. ins1der12111991 - 22 Июня, 2015 - 17:59:59 - перейти к сообщению
До вывода бинарника доходит, если убираю header-ы, то его(бинарник) выводит. Нашёл информацию, что может повлиять на неправильный вывод даже символ где-то в пределах show_image.php или добавление служебного символа блокнотом при сохранении скрипта. Так что я решил не морочить голову и всегда хранить в БД только путь к файлу, но не сам файл.
8. caballero - 22 Июня, 2015 - 20:45:37 - перейти к сообщению
ins1der12111991
хранение в Бд имеет ряд преимуществ. В первую очередь не надо синхронизировать записи в Бд с файловой системой. и бакапировать проще. Плюс при необходимости проще разделять права доступа к изображениям

проблема в кривом коде с show_image.php а не в месте хранения.
9. Viper - 22 Июня, 2015 - 20:58:23 - перейти к сообщению
caballero пишет:
хранение в Бд имеет ряд преимуществ.
эти преимущества заканчиваются на больших изображениях и БД как на дрожжах...

ins1der12111991 блокнота? Возьмите хотя бы Notepad++ и пересохраните скрипты в UTF8 без BOM.
10. LIME - 22 Июня, 2015 - 21:03:08 - перейти к сообщению
caballero только еще надо уметь готовить
Не?
Джойны с текстами и блобами выливаются в сохранение результирующих таблиц на диске если в выборке эти поля есть
В мускуле по крайней мере
Тогда лучше их делать отдельно
Отдельной таблицей
И брать по нужде
Не?
(Добавление)
Viper пишет:
эти преимущества заканчиваются на больших изображениях и БД как на дрожжах...
ага
И выбирать лучше отключая кэш если их много
Тогда лучше уж отдавать это дело фс
Короче неоднозначно...смотреть по ситуации
11. caballero - 22 Июня, 2015 - 22:01:13 - перейти к сообщению
Цитата:
Тогда лучше их делать отдельно
Отдельной таблицей
И брать по нужде
Не?

именно так - блобы в отдельной таблице
соответствено никакие джойны не с нужны - когда уже надо тянуть картинку обращение по ключу к конкретной записи
12. LIME - 22 Июня, 2015 - 22:06:57 - перейти к сообщению
caballero ииии...sql_no_cache...тогда готов согласиться что иногда это есть скорее хорошо
Ну когда скриптом отдавать хотябэ...хотя тут еще вопрос масштабируемости...но думаю это тот случай когда можно не учитывать...кто этим заморачивается сам знает что делатьУлыбка
(Добавление)
Но тогда может лучше дисковый кэш заюзать? Ооой....незнаю незнаю
Для сайтиков может и проще а вообще....скорее нет
13. ins1der12111991 - 22 Июня, 2015 - 22:20:20 - перейти к сообщению
Viper пишет:
Возьмите хотя бы Notepad++ и пересохраните скрипты в UTF8 без BOM.

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

 

Powered by ExBB FM 1.0 RC1