高可用性を確保するために、Baidu 開発者のクラウド コード スペースでは、ユーザーがコード スペースに画像を保存することはできません。CDN またはオブジェクト ストレージの使用は、料金が発生するだけでなく、より複雑になります。 img をデータベースに保存するかどうかは、パフォーマンスの問題が発生するという意見が多いですが、ぜひ試してみてください。
1. 3 つのファイルを準備します
最初のファイルは画像をデータベース文字として保存するために使用され、2 番目のファイルはデータベース文字として保存されます。 1 つは画像をデータベース文字として保存するために使用され、最初の php ファイルはデータベース文字を取得して画像を生成するために使用され、3 番目はファイル 1 で使用される画像です。
2. データベース設計
非常に長い文字列またはバイナリ データは、それぞれ TEXT (65535) と BLOB (64k) を使用して保存できますが、バイナリを使用して保存しようとすると失敗します。 . TEXT で保存しているのですが、base64 で暗号化された 500 kb を超える画像の文字数は 750,000 文字です。
TEXT を 1 つだけ保存することはできず、パフォーマンスに重大な問題を引き起こす可能性があるため、50,000 文字の長さを単位として N 個の部分に分割して保存されます。スプライシングを容易にするために 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 、画像が正常に生成されました
推奨チュートリアル:
以上がPHPでデータベースに画像を追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。