2013-12-10 3 views
1

У меня есть два файла: один для загрузки изображения, а другой - для извлечения из базы данных и представления его на веб-странице. Однако изображение появляется только как сломанный значок изображения. Я не понимаю, почему.Отображение изображения из SQL BLOB с PHP

Благодарим за любую помощь заранее.

HTML-форма:

<form action="index.php" method="POST" enctype="multipart/form-data"> 

    <label for="image">File:</label> 
    <input type="file" name="image"> 
    <input type="submit" value="Upload"> 

</form> 

РНР, чтобы загрузить его (подключение к БД остается ниже, но он отлично работает):

//file stuff 
$file= $_FILES['image']['tmp_name']; 

if(!isset($file)) 
    echo "Please select an image"; 

else { 

    $image=addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
    $imageName=addslashes($_FILES['image']['name']); 
    $imageSize=getimagesize($_FILES['image']['tmp_name']); 
    if(!$imageSize) 
     echo "Thats not an image you mong"; 
    else { 

     //upload  
     $query="INSERT INTO store VALUES('','$imageName','$image')"; 
     $sendQuery=mysql_query($query); 
     if(!$sendQuery) 
      echo "This is embarressing. It didn't work"; 
     else { 

      $lastid=mysql_insert_id(); 
      echo "Image was uploaded. <br>Your image:"; 
      echo "<img src=get.php?id=$lastid/>"; 


     } 
    }  

} 

РНР для получения изображения (Снова соединение с БД отсутствует, но отлично работает):

$id=addslashes($_REQUEST(['id'])); 

$imageQuery="SELECT * FROM store WHERE id=$id;"; 
$sendImageQuery=mysql_query($imageQuery); 
$image=mysql_fetch_assoc($sendImageQuery); 

$image=$image['image']; 

header("Content-type: image/jpeg"); 

echo $image; 

ответ

2

Удостоверьтесь, что открытие php tag - это самая первая строка файла. Если открытый php-тег не находится в первой строке файла, тогда контент уже был записан в ответ, в результате чего вызовы функции header() игнорируются.

<?php // this has to be on line 1 

// do database connections stuff, no output can be sent to the response. 
$id=addslashes($_REQUEST(['id'])); 

$imageQuery="SELECT * FROM store WHERE id=$id;"; 
$sendImageQuery=mysql_query($imageQuery); 
$image=mysql_fetch_assoc($sendImageQuery); 

$image=$image['image']; 

header("Content-type: image/jpeg"); 

echo $image; 

?> 
+0

Я специально упустил теги php и соединение db. – mickzer

+0

попробуйте и посмотрите, работает ли он. Это проблема 9 раз из 10. – robbmj

+0

В реальных файлах у меня есть теги php и соединение db. Я отметил выше, что это определенно не проблема. – mickzer

0

Может быть, один из настроек магии цитаты (magic_quotes_gpc), попробуйте:

$image=stripslashes($image['image']); 

Вы должны использовать mysql_real_escape_string() вместо addslashes() и только тогда, когда волшебные кавычки не включены.

Смежные вопросы