2012-10-08 18 views
3

我有一個函數調用數據庫類,並要求提供一個圖像列表。 這是以下功能。Php longblob到img

//Hämtar en array av filer från disk. 
public function GetFiles() 
{ 

    $sql = "SELECT pic FROM pictures"; 
    $stmt = $this->database->Prepare($sql); 

    $fileList = $this->database->GetAll($stmt); 
    echo $fileList; 
    if($fileList) 
    { 
     return $fileList; 
    } 
    return false; 
} 

這是我的數據庫類方法GetFiles調用。

public function GetAll($sqlQuery) { 

     if ($sqlQuery === FALSE) 
     { 
      throw new \Exception($this->mysqli->error); 
     } 
     //execute the statement 
     if ($sqlQuery->execute() == FALSE) 
     { 
      throw new \Exception($this->mysqli->error); 
     } 
     $ret = 0; 
     if ($sqlQuery->bind_result($ret) == FALSE) 
     { 
      throw new \Exception($this->mysqli->error); 
     } 

     $data = array(); 
     while ($sqlQuery->fetch()) 
     { 
      $data[] = $ret; 
      echo $ret; 
     } 

     $sqlQuery->close(); 

     return $data; 
    } 

的GetFiles的函數返回值是後來被另一個功能

public function FileList($fileList) 
{ 
    if(count($fileList) == 0) 
    { 
     return "<p class='error'> There are no files in array</p>"; 
    } 

    $list = ''; 
    $list .= "<div class='list'>"; 
    $list .= "<h2>Uploaded images</h2>"; 
    foreach ($fileList as $file) { 

     $list .= "<img src=".$file." />"; 
    } 
    $list .= "</div>"; 
    return $list; 
} 

處理,但我的數據庫剛剛返回LONGBLOB爲很多carachters的,我怎麼得到LONGBLOB顯示爲圖像?

回答

5

您需要base64對其進行編碼並通過數據URI將其傳入,例如,

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

但是,如果你服務了「大」的照片,這將會使一個可怕臃腫頁,完全沒有辦法緩存圖像數據以後節省用戶的下載流量。使用明確的圖片服務腳本可以讓您更好,例如

<img src="getimage.php?imageID=XXX" /> 

,然後讓你的數據庫的代碼在該腳本:

$blob = get_image_data($_GET[xxx]); 
header('Content-type: image/jpeg'); 
echo $blob; 

像這樣的問題是爲什麼它通常是一個壞主意來提供圖片從數據庫中。

1

如果您將它作爲網頁的一部分嵌入,則應使用data URI scheme

更好的辦法是讓<img>標記指向一個PHP文件,該文件設置正確的Content-Type標題並轉儲圖像數據。

0

我勸你到圖像文件系統和負載從那裏保存有以下原因:

  • 它是昂貴的數據庫,並且數據庫是難以擴展
  • 它使用的系統資源與次任務
  • IE瀏覽器,尤其是IE8,將給出SRC錯誤超過34K長

尋找到一個CDN選擇。

如果你堅持

$list = sprintf("<img src=\"data:image/jpeg;base64,%s\" />",base64_encode($file));  
+0

你是什麼保存和加載圖片meen,我如何做到這一點,我在php..sorry – user1729425

+0

1.新的,不要將圖像保存到MySQL,它已被保存..複製到一個緩存文件夾,只檢索新的圖像..如果你需要幫助,讓我知道.... – Baba

+0

好吧,是的,我知道我明白,謝謝! – user1729425