#php #mysql
#php #mysql
Вопрос:
В настоящее время я пытаюсь отобразить изображение из созданной мной базы данных, используя phpmyadmin для тестирования моего скрипта. База данных содержит изображения в формате png и jpg. Но на выходе получаются просто бессмысленные символы, потому что браузер не может отобразить изображение. Может кто-нибудь сказать мне, где я ошибаюсь?
Я гуглю проблему и вижу, что их шаблон и мой похожи, поэтому я действительно не понимаю, где я ошибаюсь. Я могу получить имя изображения в базе данных, но не само изображение.
это мой скрипт:
<html>
<head></head>
<body>
<?php
$con = mysqli_connect("localhost", "Dave", "password");
if (!$con){
die ("Could not connect to database: " . mysqli_connect_error());
}
mysqli_select_db($con, "snippet");
$res = mysqli_query($con, "select * from image");
echo "<table>";
while ($row = mysqli_fetch_array($res)){
echo "<tr>";
echo "<td>"; ?> <img src="<?php echo $row["image"]; ?>" height="100" width="100"> <?php echo "</td>";
echo "<td>"; echo $row["image_name"]; echo "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Комментарии:
1. что содержит $row[«image»] …? URL или что-то еще …?
2. Проверьте свою структуру папок.. Я думаю, что ваш код получает имя изображения только из базы данных. Вы должны добавить имя папки с вашим изображением. Например: Путь к изображению: /images/123.jpg тогда вы должны написать свой код следующим образом <img src=»<?php echo ‘images/’.$row[«image»]; ?>» height=»100″ width =»100″>
3. не храните изображения в базе данных. это безумие. если вы боитесь сложности загрузки изображений, это довольно просто с
php_exif
иlibgd
установлено. проверьте github.com/bivoc/bulletproof для класса, который будет выполнять достаточно безопасную загрузку изображений всего несколькими строками кода.4. Это не безумие. Это просто менее распространено / популярно, чем альтернатива.
5. @Orion: да ванг ань 🙂
Ответ №1:
В каком формате хранится ваше изображение? Необработанные байты? База-64? или URL?
Если это URL, то просто используйте атрибут ‘src’ элемента html img.
Если это Base-64, тогда используйте
<img src="data:image/jpg;base64,THE BASE 64 code here" />
Если у вас есть необработанные байты, либо преобразуйте их в Base-64 с помощью PHP
$base64segment = base64_encode($data);
или вы можете вызвать пользовательский URL-адрес в атрибуте src, который приведет к PHP-скрипту, где вы можете создать изображение на лету из байтов, отправив пользовательский заголовок, за которым следуют байты:
<?php
header('Content-type: image/jpeg');
header('Content-Length: '.strlen($data));
echo $data;
?>
Недостатком подхода, основанного на базе 64, является то, что данные занимают больше места, чем исходный двоичный сегмент, потому что кодирование выполняется с использованием 64 различных знаков вместо 256.
Ответ №2:
С помощью этого:
<img src="<?php echo $row["image"]; ?>
Вы устанавливаете источник изображения. Это должен быть либо URL, либо путь от вашего корневого сервера. Обычно я сохранял местоположение и имя файла (например, «/images/imagename.png») в базе данных.
Если вы использовали MIME-тип или BLOB-объект в базе данных, этот код не будет работать.
Ответ №3:
Вы пробовали это?
$base64 = 'data:image/PNG;base64,' . base64_encode($row['image']);
echo "<img src=$base64 />" ;
В вашем коде…
while ($row = mysqli_fetch_array($res)){
echo "<tr>";
echo "<td>"; ?> <img src="<?php echo data:image/PNG;base64,'. base64_encode($row["image"]); ?>" height="100" width="100"> <?php echo "</td>";
echo "<td>"; echo $row["image_name"]; echo "</td>";
echo "</tr>";
}
Ответ №4:
<html>
<head></head>
<body>
<?php
$con = mysqli_connect("localhost", "Dave", "password");
if (!$con){
die ("Could not connect to database: " . mysqli_connect_error());
}
mysqli_select_db($con, "snippet");
$res = mysqli_query($con, "select * from image");
echo "<table>";
while ($row = mysqli_fetch_array($res)){
$row["image"] = "data:image/png;base64,".base64_encode($row["image"]); //the trick!
echo "<tr>";
echo "<td>"; ?> <img src="<?php echo $row["image"]; ?>" height="100" width="100"> <?php echo "</td>";
echo "<td>"; echo $row["image_name"]; echo "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Комментарии:
1. Вы отвечаете нормально, но вместо того, чтобы публиковать весь код, просто попробуйте исправить ошибку, которая есть у спрашивающего.
Ответ №5:
Вам нужно сохранить изображение MIME type
в базе данных, тогда вы можете отобразить изображение следующим образом:
echo $row["image"];
header("Content-Type: ".$row['mime_type']);
Например, PNG
‘s MIME type
является image/png
;