Подтвердить что ты не робот

Отображение изображения, сохраненного в блоке mysql

когда я запускаю код ниже, он отображает изображение, которое хранится в mysql Db как переменная blob. Проблема в том, что я повторяю что-то еще, даже что-то простое, как echo '--------'; пока я не вызову изображение, изображение не будет отображаться. отображаются только случайные символы. если я выхожу из ничего после изображения, которое отображает изображение, но после него ничего не происходит. Может кто-нибудь сказать мне, почему это так, и как я могу показывать отображение других элементов и изображения вместе, спасибо

<?php

include("inc/library.php");

connectToDatabase();

$sql = "SELECT * FROM theBlogs WHERE ID = 1;";

$result = mysql_query($sql) or die(mysql_error());  
$row = mysql_fetch_array($result);

header("Content-type: image/jpeg");
echo $row['imageContent'];
$db->close();

?>
4b9b3361

Ответ 1

Вы можете преобразовать данные изображения в base64 и вставить его в тег <img>. В настоящее время вы пытаетесь написать текст за пределами данных изображения, и интернет-браузер считает, что ваш текст является частью изображения и, таким образом, выдает ошибку.

Попробуйте что-то вроде этого:

echo '<img src="data:image/jpeg;base64,' . base64_encode( $row['imageContent'] ) . '" />';
echo 'Hello world.';

Примечание. Это не лучшее решение, потому что оно не может быть кэшировано и довольно медленное, особенно на мобильных телефонах. Ознакомьтесь с caniuse для URI данных.

Ответ 2

Ну... ответ на вопрос, почему он будет делать то, что вы описали, из-за использования функции header(). В PHP вы не можете ничего печатать до вызова заголовка, так как это позволяет веб-серверу подготовить заголовок содержимого. Обычно они полностью заменяют все содержимое.

Во-вторых, я хотел бы упомянуть, что хранение изображений в базе данных, как правило, является плохой идеей по двум причинам.

  • Это оказывает существенное влияние на производительность и рендеринг.
  • Вам нужно написать код, отображающий данные blob, а не просто отображение самого изображения.

Предпочтительным способом представления изображений с управляемой базой данных будет то, что у вас будут изображения, хранящиеся в каталоге, и их имена файлов, хранящиеся в базе данных. Теперь, когда вы хотите отображать изображения, вам просто нужно опросить БД, какие имена файлов вы хотите отобразить, а затем просто включить имя файла в атрибут HTML.

Выполнение выполняется намного быстрее.

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

Обратите внимание, что когда вы создаете свой тег html... в атрибуте src, вы должны сделать его более похожим на это:

<img src="image.php?id=<some_number>">

Теперь ваш файл image.php выплевывает данные изображения в тег.

Ответ 3

Просто идея, возможно, вы можете разделить логику, чтобы отобразить изображение из контента. Я имею в виду, что вы можете создать файл типа pic.php, который принимает id/filename (не уверен, что вы используете имена файлов или идентификатор для ссылки на изображение), а затем отображает изображение. Затем вы можете просто перефразировать изображения в своем HTML, например, сделав что-то вроде этого:

<p>my content</p>
<img src="pic.php?picid=1" />
<p>my Other Content</p>