В PHP, как я показываю различные изображения из поля BLOB в базе данных с содержимым HTML? - PullRequest
2 голосов
/ 08 июня 2011

Я сохранил изображения в базе данных, используя поле BLOB (я использую SQLite).Теперь я хочу восстановить это изображение на HTML-странице и показать там изображения.

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

Ответы [ 5 ]

1 голос
/ 08 июня 2011

@ uscere90 правильно, но может помочь пример (пример изображения PNG):

<?php
  header("Content-type: image/png");
  echo $image_data;
?>
1 голос
/ 08 июня 2011

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

 <img src="/myimagescript.php?id=1234">

В myimagescript.php:

//get the data from the database somehow (mysql query et al.)
//let's assuma the data is in $data
header('Content-Type: image/jpeg');//alter for png/gif/etc.
echo $data;
0 голосов
/ 08 июня 2011

Я бы сказал, что есть два варианта:

  1. Вы создаете скрипт, который возвращает данные изображения. Поле <img src=" вызывает этот сценарий.
  2. Вы предлагаете данные изображений напрямую через URL данных .

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

Поскольку уже есть примеры для метода сценария изображения, вот фрагмент кода для URI данных:

<?php
function data_uri($content, $mime) 
{  
  $base64   = base64_encode($content); 
  return ('data:' . $mime . ';base64,' . $base64);
}
?>

<img src="<?php echo data_uri($content,'image/png'); ?>" />

Вам необходимо установить MIME-тип в соответствии с вашим изображением, image/png для изображений PNG, image/jpeg для файлов JPG и т. Д., См. здесь для списка .

0 голосов
/ 08 июня 2011

Обычно это делается путем создания сценария-обёртки или функции, которая извлекает большой двоичный объект и доставляет его с соответствующими заголовками содержимого, которые будут использоваться в качестве <img src=''>

. Выполнение этого также дает вам преимуществовозможность доставлять или не доставлять изображение на основе других факторов аутентификации, определенных вашим PHP.Если, например, пользователь не имеет разрешения на просмотр изображения, вы можете вместо этого показать вместо него какое-то изображение по умолчанию или изображение блокировки.

// File getimg.php
// Retrieve the image blob specified by $_GET['imgid'] from the database

// Assuming your blob is now in the variable $image...
header("Content-type: image/jpeg");
// Just echo out the image data
echo $image;
exit();

Теперь в вашем html:

<img src='getimg.php?imgid=12345' alt='this is your img from the database' />
0 голосов
/ 08 июня 2011

Вы можете создать простую страницу image.php, которая запрашивает вашу базу данных, затем распечатывает тип контента, соответствующий изображению, и выводит двоичные данные на экран. Таким образом, в вашей таблице у вас будет <img src=image.php?id=something />, а затем вы будете использовать этот идентификатор на странице image.php для поиска в вашей базе данных, извлечения двоичных данных и распечатки их на экране после печати типа содержимого заголовок.

image.php:

<?php

header('Content-type: image/jpeg');

//DO SQL NINJA STUFF HERE

echo mysql_result($result,0,"file_content");

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...