Мой PHP-скрипт для хранения закодированных данных изображения в таблице базы данных в виде типа «blob»:
include './libraries/LIB_mysql.php'; # library for using the 'insert()' function at the end
$imageFilePath = "./pythonProgrammingProgram.PNG";
$imageFileRead = file_get_contents($imageFilePath); # == �PNG IHDR�A ... uY�IEND�B`� (... and so on)
$imageEncode = base64_encode($imageFileRead); # iVBORw0KGgoAAAA (... and so on)
$data_array['image_id'] = 3;
$data_array['image_file'] = $imageEncode;
$table = 'images';
insert(DATABASE, $table, $data_array);
Данные изображения, похоже, правильно хранятся в базе данных:
mysql> select * from images;
| image_id | image_file
| 3 | iVBORw0KGgoAAAA # (... and so on)
Я бы хотел, чтобы изображение отображалось на странице HTML с помощью тега img, который вызывает скрипт PHP: <img src="./imageDisplay.php?pictureID=3">
.
PHP-скрипт imageDisplay.php
, извлекающий данные изображения из базы данных и отображающий декодированное изображение:
header("Content-type: image/png");
include('./libraries/LIB_mysql.php'); # for using exe_sql() function
$image_id = $_GET['pictureID']; # == 3 -> corresponds to the value in the database !!
$sql = "SELECT image_file FROM images WHERE image_id = '" . $image_id . "'"; # $image_id";
list($img) = exe_sql(DATABASE, $sql); # $img contains the decoded data: == �PNG IHDR�A ... uY�IEND�B`� (... and so on)
echo base64_decode($img);
exit;
При загрузке HTML-файла на локальный хост я вижу сломанное изображение. В Firefox под Сетью -> Ответ я вижу:
Name: imageDisplay.php
Dimensions: 0 × 0
MIME Type: image/png
Я думаю, передача данных изображения не сработала, но я не могу понять, почему. Данные декодированного изображения в base64_decode($img)
такие же, как в $imageFileRead
до кодирования, поэтому я предполагаю, что операции с базой данных не проблема, а где-то в echo base64_decode($img);
или <img src="./imageDisplay.php?pictureID=3">
. Нашел это (ТАК вопрос) [ PHP - вызов функции из img src и (это другое) [ Изображение не может быть отображено, поскольку оно содержит ошибки , но все еще не может увидеть, как исправить это: - (