備注
百度開發者的雲代碼空間為了保證高可用,不允許用戶將圖片保存到代碼空間中,使用CDN或者對象存儲不僅收費而且使用比較復雜,於是考慮能否將img存儲在數據庫中,雖然很多人說會造成性能問題,權當一試
1.准備三個文件
第一個用於將圖片存儲為數據庫字符,第二個php文件用於獲取數據庫字符並生成圖片,第三個是文件1所使用的圖片
2.數據庫設計
超長字符串或者二進制數據分別可以用TEXT(65535),BLOB(64k)保存,但是嘗試使用二進制保存失敗,便使用TEXT保存,但是一張500多kb的圖片經過base64加密的字符長度高度75萬!,僅僅靠一個TEXT是存不下去的,而且應該也會造成嚴重的性能問題,所以分割成N份保存,這里以50000字符長度為一個單位.記錄imgid,方便拼接
3.將圖片保存到數據庫[dm01_imgTobase64.php]
/*鏈接數據庫*/ // 1.轉為普通字符 $file = file_get_contents('test.jpg'); $base64_str = base64_encode($file); $len = strlen($base64_str); $step = ceil($len/50000); for ($i=0; $i <$step ; $i++) { $substr = substr($base64_str, $i*50000,50000); $sql = "INSERT INTO b64_img VALUES( null,1,1,$i,'$substr') "; $res = mysqli_query($link,$sql); }
4.生成的數據
5.讀取數據庫記錄,生成圖片[dm02_getImg.php]
/*鏈接數據庫*/ $sql = "SELECT * FROM b64_img WHERE imgid = 1 ORDER BY bakid ASC "; $res = mysqli_query($link,$sql); $data = array(); $imgStr = ''; while ($row = mysqli_fetch_assoc($res)) { $imgStr .= $row['bstr'] ; } $binaryStr = base64_decode($imgStr); file_put_contents("ThisImg.jpg", $binaryStr);
6.成功生成圖片