2012-11-05 66 views
13

顯示我的BLOB圖像所以,我的最後一個問題是關於如何有從搜索出我的techID:我需要我的PHP頁面從MySQL數據庫

I am trying to have my "Details" page to reference two seperate parts of my server that are linked via techID

我的新問題是,在此頁上。我也添加了回顯圖像。但是在使用Blob時遇到問題,並且顯示我的圖像而不是二進制JPEG數據。 我一直在試圖找到這個的另一個實例,但找不到任何解決我的錯誤。

//Header ('Content-type: image/jpeg') 
echo "<dt><strong>Technician Image:</strong></dt><dd>" . '<img src='.$row2['image'].' width="290" height="290">' . "</dd>"; 

$query_Recordset2 = "SELECT * FROM technician WHERE techID=" . $row1["techID"] ; 
$Rs2 = mysql_query($query_Recordset2) or die(mysql_error()); 

只是我已經把在如此遠離我的最後一個問題的變化(包括明顯我被給予此修復工作)。

我不明白的是在哪裏以及如何使'Content-type: image/jpeg'讓我的網頁識別出正在鏈接的圖像,它是MIME類型image/jpeg

什麼我看到我的網頁上是這樣

技術員圖片: Eji` = $ 7F做「B Ckkc R ^M ;〜0120 & m)J R E)JDR E)JDR E)JDR E)JDR E)JDR E)JDSjR ) + N .R,u i n9, QX〜 {( ̮ : 2 12 「 aV7 6 { LP[ W R $ + LMc'hM 5 o PA | ګ .8 E Rn 1 [ { 3> rY X ; Ǖ u z ' vf N葟 z Q k 3 O ܨ ٔ ٔ ?s ,N [{+ d ;'$$ & IJR)JR)JR)JR)JR )JR)JR)JR)JR)JR)JR)JR) 寬度= 「290」 HEIGHT = 「290」>

很明顯,我已經刪除了一箇中間塊,所以它不是很大。有一個「破碎的圖像」框出現在面前,當我右鍵單擊並選擇「在新窗口中打開圖像」時,其放入的URL僅爲Content-type:,或者我得到一個帶有url的禁止訪問頁面http:// localhost/Sim5Server/Pages/%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%10JFIF%EF%BF%BD%01%02%EF%BF%BD%EF%BF%BDd%EF%BF%BDd%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BDC%EF%BF%BD

I已經在該網址中放置了一個空間,因爲它不是互聯網的鏈接。

我只用我只需要它作爲一個小的不足64Kb的圖像

+1

*旁註:*停止使用不推薦使用的'mysql_ *'函數。改爲使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)。 – Raptor

回答

37

在您當前的情況下,您有兩個前期選項。

第一個和我不建議如果你有這樣的衆多圖像,是使用內聯base64編碼。這是通過做:

<img src="data:image/jpeg;base64,<?php echo base64_encode($image); ?>" /> 

複製/粘貼的版本,使用現有的代碼:

echo '<dt><strong>Technician Image:</strong></dt><dd>' 
    . '<img src="data:image/jpeg;base64,' . base64_encode($row2['image']) . '" width="290" height="290">' 
    . '</dd>'; 

第二種方法是創建一個「形象」 PHP文件接收圖片的ID中數據庫作爲查詢字符串參數並輸出圖像。所以,你的HTML看起來是這樣的:

<img src="image.php?id=<?php echo $image_id; ?>" /> 

和你的PHP頁面看起來類似於:

<?php 
$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0; 
$image = getImageFromDatabase($id); // your code to fetch the image 

header('Content-Type: image/jpeg'); 
echo $image; 
?> 
+0

謝謝您修復我的文章(不太擅長我的發帖禮儀)。我嘗試了第二個,但我認爲我在某個時候做錯了什麼。沒有太多的圖片,所以我和你的以及Musa的帖子一起(Musa的,因爲我可以簡單地複製並粘貼到我原有的代碼上)。你能否給我任何煽動'base64'de/encoding實際上做的事情? – DBeslan

+0

@DBeslan我已經爲您更新了複製/粘貼示例(儘管您已經收到了與Musa類似的內容;我仍然建議您嘗試獲得第二個版本,並且很樂意幫助您解決這個問題) – newfurniturey

+0

I不知道我的圖片類型是什麼,它可能是jpeg,png,gif現在這個代碼是什麼 –

2

你可以從同一個頁面的輸出圖像的唯一方法,因爲該文件與data uri正常的BLOB類型。

echo "<dt><strong>Technician Image:</strong></dt><dd>" . 
    '<img src="data:image/jpeg;base64,'. 
     base64_encode($row2['image']). 
     '" width="290" height="290">' . "</dd>"; 
+0

我試過這個,我得到的只是一個290x290的「空圖像」盒子。我不udnerstand base64編碼/解碼。 – DBeslan

+0

@DBeslan現在試試 – Musa

+0

它工作!非常感謝穆薩。我想問你這是如何工作的?瞭解我/你做了什麼會很方便。 – DBeslan

-1

我認爲最好的解決辦法是存儲圖像的路徑中的數據庫,而不是 將整個圖像存儲爲BLOB。然後爲了顯示網頁上的圖像,將img標籤的 src屬性設置爲存儲在數據庫中的路徑。

2

正確的代碼應該如下。您必須使用stream_get_contents()將資源ID更改爲字符串。

<img src="data:image/jpeg;base64,<?php echo base64_encode(stream_get_contents($row2['image'])); ?>" /> 
+0

您節省了我生命中的太多時間,謝謝。我的代碼只是用於base64_encode($ image_blob_file)。我們最近升級到了新的主機,它停止工作;給我一堆的錯誤(base64_encode期望字符串,但資源找到)感謝你,當我編碼輸入流而不是圖像,它的工作。 –

+0

令人驚訝的是,如何引用stream_get_contents(),我從來沒有碰到過像「blob to string php」,「convert blob to string ...」,... – aurelienC

相關問題