PHPとMySQLで画像をBLOB型で管理する

PHPとMySQLで画像をBLOB型で管理する

PHPPHPとMySQLで画像をBLOB型で管理する

ショップや病院など、タウン情報やグルメ情報などの紹介サイトには写真が使われることが多いです。写真の画像は、通常はフォームからアップロードしてファイルとして保管することが多いですが、データベースでバイナリを管理することもできます。

利点としては、複数の Web サーバ(クラスタ環境)でも、各サーバに画像を配備しなくてもいいなどファイル管理の手間が省けます。デメリットとしては、画像の取得にデータベースアクセスが必要になることと、容量の問題も出てくるでしょう。

NFS やメモリ上での共有など、方法はいろいろありますが、こちらもネットワークのトラフィックなどの問題もあります。今回は、初めてデータベース(MySQL)の BLOB 型を利用してみたのでまとめてみました。

まずはファイルアップロード部分です。今回は GD ライブラリや ImageMagic を利用して画像のサイズも動的に変更していますが、その部分は省きます。

// URLやファイルパス
$uploadfile = /home/saratoga/hogehoge.jpg;
// 画像データを文字列として取得
$image = file_get_contents($uploadfile);

// $imageの中身を BLOB 型のカラムに入れる

次に画像取得スクリプトです。html 上から画像のみを取得するスクリプトを実行します。

[html]
<img src="/image.php?id=hogehoge" alt="hogehoge" />

[image.php]
// データ取得
$sql = "SELECT * FROM hogehoge WHERE image = ? ";
$data = [SQLの実行結果];

header("Content-Type: image/jpeg");
print $data["image_binary"];
exit();

データベース接続が気になる場合は、最初のデータ取得時に、ローカルにファイルでキャッシュしておくと速度的にもリソース的にもいいかもしれません。

最終更新日:

関連記事

人気記事

新着情報