2013-02-03 82 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。第一次觀察幫助我瞭解了創建表格字段時使用的名稱,我驚訝地發現我給表格字段輸入了錯誤的名稱。糾正他們後,我的形象開始顯示,感謝上帝,我滿心歡喜。請看看你的桌子上的字段,或許你像我那樣拼錯了它。 :)