2013-02-03 85 views
1

好吧,所以我知道这个问题已被问到,但我仍然无法弄清楚我的代码出了什么问题。Blob数据PHP破碎的图像?

我想将图像上传到数据库并将其存储为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; 

?> 

任何帮助表示赞赏???我只是不明白为什么我得到一个破碎的图像...

+0

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 –

+0

谢谢你会做,我知道这些,但只是没有得到他们。 –

回答

1

这是一个很好的机会,它是一个hidden BOM字符在一个PHP文件的开始。

请你可以改变

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

//header("Content-type: image/jpeg"); 
echo substr($image, 0, 20); 

,看看它是否看起来像一个有效的JPEG文件的开始 - 像 'ÿØÿàJFIF'

相反,如果它有在开始时,它意味着至少有一个PHP文件在其开始时有字节顺序标记,并且需要将其删除。

+0

好吧,我这样做了,我注意到我跑Photosite时没有任何变化。PHP(第一个代码)。所以我将整个ShowPics.php转换为/ * * /音符,并且仍然没有改变。那么ShowPics.php中的某些内容必须是错误的,或者代码第一部分的img src代码? –

2

<?php之前,第一行有一个空格。如果在你的代码中是这样的话,那就给出了问题。在回放图像之前,不应输出任何内容。

如果你确定当前文件是正确的,你可以做

<?php 
ob_start(); 

// do stuff 

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

利用此解决方案,图像是显示如果去DB斑是正确的。

您可以在phpmyadmin using transformations中查看BLOB。


P.S.如果你把斜线之间的值addslashes不仅可以帮助,所以

$id = addslashes($_REQUEST['id']); 
$image = mysql_query("SELECT * FROM photo WHERE id='$id'"); 
+0

它不像我的代码,但谢谢。 –

+0

K,增加了更多建议... –

0

嗯,我也是在这你破碎的形象的问题,分享,直到我从这个网站[http://www.boogiejack.com/阅读这篇文章HTML的帮助/ HTML的帮助,破碎image.html。第一次观察帮助我了解了创建表格字段时使用的名称,我惊讶地发现我给表格字段输入了错误的名称。纠正他们后,我的形象开始显示,感谢上帝,我满心欢喜。请看看你的桌子上的字段,或许你像我那样拼错了它。 :)