При выборке изображений из БД в браузере выводятся кракозябры.

Pavl

Active Member
Регистрация
28.09.2016
Сообщения
43
Идея в том, чтобы вывести в браузер из БД картинки.
Испольную локальный сервер на ПК.
Пробую разные варианты, но пока ничего не получается.
Вот 2 варианта из множества.

Вариант кода №1:
PHP:
<?php
mysql_connect('localhost','root','');
$res = mysql_select_db('images');
//var_dump($res);
$res = mysql_query("SELECT * FROM img");
//var_dump($res);
while (false !== ($row = mysql_fetch_array($res))) {
    echo "<a href='page.php'>$row[name]</a>";
    echo '<br>';
    echo "<img src=$row[samfile]";
     }
    ?>
При использовании этого кода в браузере выводятся кракозябры.
Кракозябры..JPG


Вариант кода №2:
PHP:
<?php
mysql_connect('localhost','root','');
$res = mysql_select_db('images');
//var_dump($res);
$res = mysql_query("SELECT * FROM img ORDER BY id DESC");
//var_dump($res);
while (false !== ($row = mysql_fetch_assoc($res))) {
    $show_img = base64_encode($row['samfile']);?>
    <img src="data:image/jpeg;base64, <?php echo $show_img ?>" alt="" />
<?php   } ?>
При использовании этого кода в браузере выводятся изображения, но в урезанном виде.
Обрезанные изображения..JPG

Если эти картинки выводить из папок, то они нормально отображаются.
Проблема, только с их выводом из БД.
БД выглядит так:
База данных images..JPG


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

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 066
Хранить изображения в БД самая плохая идея. Надо хранить путь до картинки на сервере.

Второй вариант правильный. Точной причины проблемы не знаю, но могу предположить такие варианты (сводятся к одному):
- скрипт не успевает обработать все данные и вывести
- в БД записались неполные изображения
- посмотреть через консоль браузера, может там height фиксированный, попробовать выставить в 100% или auto
 
  • Like
Реакции: Pavl

Volly

Well-Known Member
Регистрация
21.03.2012
Сообщения
782
Pavl, при таком варианте
echo "<img src=$row[samfile]";
значением src должен быть адрес, а не тело картинки.
Когда браузер запросит картинку по этому адресу, то там должен быть скрип php, который достанет дело картинки из базы и отдаст в браузер таким образом:
header('Content-Type: тут_тип_данных');
echo $row[samfile];
Причём, в этом скрипте перед header и выше не должно быть других echo, принт и никаких html типа <br>, пробеов, переводов строк.

При таком варианте
img src="data:image/jpeg;base64
может сказаться ограничение размера картинки браузерами.

Таки да, солидарен с BaNru, что картинки лучше держать файлами на диске.
 
Последнее редактирование:
  • Like
Реакции: Pavl

Pavl

Active Member
Регистрация
28.09.2016
Сообщения
43
Частично, удалось решить задачу.
Изображения выводятся. И выводятся в уменьшенном виде.
В БД изменил тип данных с BLOOB на LONGBLOOB. В результате чего объём изображений в БД значительно увеличился.
А уменьшенный выводимый размер скорректировался просто установкой длины и ширины в коде.
В общем - всё, как и нужно было.
Но, образовалась следующая проблема, о которой я создам уже другую тему...
 
Верх Низ