PHP把圖片保存到數據庫,將圖片本身保存在數據庫,而非保存路徑


 

備注
百度開發者的雲代碼空間為了保證高可用,不允許用戶將圖片保存到代碼空間中,使用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.成功生成圖片

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM