PHPとMySQLで画像をBLOB型で管理する
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2010-01-12
ショップや病院など、タウン情報やグルメ情報などの紹介サイトには写真が使われることが多いです。写真の画像は、通常はフォームからアップロードしてファイルとして保管することが多いですが、データベースでバイナリを管理することもできます。
利点としては、複数の 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();
データベース接続が気になる場合は、最初のデータ取得時に、ローカルにファイルでキャッシュしておくと速度的にもリソース的にもいいかもしれません。
関連記事
上記の記事に関連する記事(最新の10件)です。


