У меня есть функция, которая вызывает класс базы данных и запрашивает список изображений. Это ниже функция.
//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
и выгружает данные изображения.
Я бы посоветовал вам сохранить изображение в файловой системе и загрузить оттуда по следующим причинам:
Просмотрите вариант CDN.
Если вы настаиваете
$list = sprintf("<img src=\"data:image/jpeg;base64,%s\" />",base64_encode($file));