Intereting Posts

отображение изображения, сохраненного в блоке 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(); ?> 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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