Php longblob для img

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

//Hämtar en array av filer från disk. public function GetFiles() { $sql = "SELECT pic FROM pictures"; $stmt = $this->database->Prepare($sql); $fileList = $this->database->GetAll($stmt); echo $fileList; if($fileList) { return $fileList; } return false; } 

И это мой метод класса базы данных, который вызывает GetFiles.

 public function GetAll($sqlQuery) { if ($sqlQuery === FALSE) { throw new \Exception($this->mysqli->error); } //execute the statement if ($sqlQuery->execute() == FALSE) { throw new \Exception($this->mysqli->error); } $ret = 0; if ($sqlQuery->bind_result($ret) == FALSE) { throw new \Exception($this->mysqli->error); } $data = array(); while ($sqlQuery->fetch()) { $data[] = $ret; echo $ret; } $sqlQuery->close(); return $data; } 

Возвращаемое значение функции GetFiles затем обрабатывается другой функцией

 public function FileList($fileList) { if(count($fileList) == 0) { return "<p class='error'> There are no files in array</p>"; } $list = ''; $list .= "<div class='list'>"; $list .= "<h2>Uploaded images</h2>"; foreach ($fileList as $file) { $list .= "<img src=".$file." />"; } $list .= "</div>"; return $list; } 

Но моя база данных просто возвращает longblob как много карачаеров, как я могу получить длинную фигуру в качестве изображений?

Вам нужно будет закодировать base64 и передать его через URI данных, например

 <img src="data:image/jpeg;base64,<?php echo base64_encode($file) ?>" /> 

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

 <img src="getimage.php?imageID=XXX" /> 

а затем введите свой код db в этом скрипте:

 $blob = get_image_data($_GET[xxx]); header('Content-type: image/jpeg'); echo $blob; 

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

Если вы внедряете его как часть веб-страницы, вы должны использовать схему URI data .

Лучше было бы, чтобы <img> указывал на PHP-файл, который устанавливает правильный заголовок Content-Type и выгружает данные изображения.

Я бы посоветовал вам сохранить изображение в файловой системе и загрузить оттуда по следующим причинам:

  • В базе данных это дорого, а базы данных сложнее масштабировать
  • Он использует много системных ресурсов для незначительной задачи
  • Internet Explorer, особенно IE8, даст ошибку для src более 34k

Просмотрите вариант CDN.

Если вы настаиваете

 $list = sprintf("<img src=\"data:image/jpeg;base64,%s\" />",base64_encode($file));