Хорошо, поэтому я знаю, что этот вопрос задан, но я все еще не мог понять, что не так с моим кодом.
Я пытаюсь загрузить изображение в базу данных и сохранить его как blob, чтобы он мог выводиться на страницу. Все работает, все хранится в базе данных mysql, но когда я пытаюсь отследить blob, это дает мне сломанное изображение. Вот мой код.
$file = $_FILES['image']['tmp_name']; if(!isset($file)) { echo "Please select image."; } else { $image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); $image_name = $_FILES['image']['name']; $image_size = getimagesize($_FILES['image']['tmp_name']); if($image_size==FALSE) { echo 'that is not an image.'; } else { if (!$insert = mysql_query("INSERT INTO photo VALUES ('', '$image_name', '$image')")) { echo "Problem uploading image"; } else { $lastid = mysql_insert_id(); echo "Image uploaded.<p />Your image:<p /><img src=ShowPics.php?id=$lastid>"; } } } ?> <form action="Photosite.php" method="POST" enctype="multipart/form-data"> <input type="file" name="image"></br></br> <input type="submit" value="Submit"> </form>
И моя страница PHP
<?php $id = addslashes($_REQUEST['id']); $image = mysql_query("SELECT * FROM photo WHERE id=$id"); $image = mysql_fetch_assoc($image); $image = $image['image']; header("Content-type: image/jpeg"); echo $image; ?>
Любая помощь ценится ??? Я просто не понимаю, почему я получаю сломанное изображение …
У вас есть пробел в первой строке, перед <?php
. Если это похоже на ваш код, это создает проблему. Ничего не следует выводить, прежде чем вы эхо изображение.
Если вы уверены, что текущий файл верен, вы можете сделать
<?php ob_start(); // do stuff ob_end_clean(); header("Content-type: image/jpeg"); echo $image;
С помощью этого обходного пути изображение отображается, если флажок в DB правилен.
Вы можете проверить BLOB в phpmyadmin с помощью преобразований .
PS addslashes
помогает только в том случае, если вы ставите значение между косой чертой, поэтому
$id = addslashes($_REQUEST['id']); $image = mysql_query("SELECT * FROM photo WHERE id='$id'");
Есть хороший шанс, что это скрытый характер спецификации в начале одного из ваших файлов PHP.
Пожалуйста, можете изменить
header("Content-type: image/jpeg"); echo $image;
в
//header("Content-type: image/jpeg"); echo substr($image, 0, 20);
И посмотрите, похоже ли это на начало действительного файла jpeg – что-то вроде «ÿØÿàJFIF»
Если вместо этого он имеет «ï» ¿'в начале, это означает, что хотя бы один из ваших файлов PHP имеет маркер порядка байтов в начале его, и его нужно удалить.
Хм, я также поделился этой проблемой с сломанным изображением, пока не прочитал этот пост с этого сайта [http://www.boogiejack.com/html-help/html-help-broken-image.html]. Первое наблюдение помогло мне пройти через имена, которые я использовал при создании полей таблицы, и я был потрясен, увидев, что я дал неправильное имя для моих полей таблицы. Поправив их, мой образ начал показывать, слава богу, я был счастлив от радости. Пожалуйста, просмотрите поля своего стола, возможно, вы опустили его, как я. 🙂