顯示圖片比較簡單,通常只要將查詢的結果dump出來,例如:
showpic.php
$db->query("select content from images where id = 1");
$pic = $db->fetch()->content;
echo $content;
show.html
上傳圖片需要編碼處理,例如我們先用$_FILES取得上傳的圖片資訊:
$name = $_FILES['picfile']['name'];
$tmp_name = $_FILES['picfile']['tmp_name'];
接著將上傳的暫存檔案(即圖片檔)內容全部讀出來(file_get_contents的預設flag是FILE_BINARY,不會有問題)。
$c = file_get_contents($tmp_name);
再來,必須先將圖片內容以HEX編碼轉換成字串(即十六進位表示法)。
$content = "0x";
for ($i=0; $i
$h = dechex(ord($c[$i]));
if (strlen($h)<2 .="" h="" span="">
$content .= $h;
}
編碼後產生的字串格式…
0x112233445566778899AABBCCDDEEFF
解說:
從圖片檔讀取每一個byte,其ASCII的值範圍是0~255,也就是需要2^8來表示(即8個bit),轉成十六進位必須要16^2表示,也就是每個byte需要儲存成兩個16進位的字元符號,所以轉換的結果以固定每兩個十六進位字元符號來表示一個byte資料的值。例如255就是FF,而10就是A,而A只用了一個字元符號,必須在前面補0變成0A。
轉換之後,要寫入資料庫就跟平常的SQL並無不同。
$db->query("insert into images(name, content) values('$name', $content)";
唯一需要注意的是,範例程式碼中的$content並不需要加上單引號,因為開頭的0x已經宣告這是一串十六進位表示的資料,若加上單引號則會被當作字串,反而會出現型態不符的警告。2>
出处来源:http://blog.lyhdev.com/2008/12/phpms-sql-server-image.html