PHP отображает изображение BLOB из MySQL
Я пытаюсь отобразить изображение, сохраненное в столбце BLOB в базе данных;
Я извлекаю данные из базы данных с помощью SELECT, не выполняю преобразований данных и отображаю их со следующим (из script, единственным выходом которого является следующий):
header("Content-Type: image/jpeg");
echo $image;
Обратите внимание, что хром отображает размер содержимого как правильный размер для изображения, а также правильный тип mime (image/jpeg
). ничто не повторяет перед заголовком, а ive проверяет правильность блоба в базе данных. Также нет теневых пробелов до или после тегов <?php ?>
.
chrome/IE отображает значок изображения, но не сам образ. любые идеи?
EDIT: изображение получает из базы данных как таковое:
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$row = $sth->fetch();
$image = $row['image'];
var_dump ($ image) дает:
string 'ÿØÿà�JFIF��x�x��ÿá�ZExif��MM�*�����������J��������Q�������Q������tQ������t�����† ��±ÿÛ�C�
ÿÛ�CÿÀ�_"�ÿÄ�����������
ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’""•–—˜™š¢£¤¥¦§¨©ª²³ ´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������'... (length=60766)
Ответы
Ответ 1
Попробуйте вот так.
Для вставки в DB
$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$image = addslashes(file_get_contents($_FILES['images']['tmp_name']));
//you keep your column name setting for insertion. I keep image type Blob.
$query = "INSERT INTO products (id,image) VALUES('','$image')";
$qry = mysqli_query($db, $query);
Для доступа к изображению из Blob
$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';
Надеюсь, это поможет вам.
Спасибо.
Ответ 2
Это то, что я использую для отображения изображений из blob:
echo '<img src="data:image/jpeg;base64,'.base64_encode($image->load()) .'" />';
Ответ 3
Так как я должен хранить типы содержимого varius в моем поле/столбце blob, предположим, чтобы обновить мой код следующим образом:
echo "data: $mime" $result['$data']";
где:
mime может быть изображением любого типа, текстом, текстовым документом, текстовым документом, pdf-документом, e.t.c...
данные - это содержимое столбца blob.