クマの手も借りたい
馬とテニスとリラックマが好きな IT 系のエンジニアです。
PHP

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

ショップや病院など、タウン情報やグルメ情報などの紹介サイトには写真が使われることが多いです。

写真の画像はフォームからアップロードしてファイルとして保管することが多いですが、データベースでバイナリを管理することもできます。

データベース管理のメリットとデメリット

利点としては、複数の Web サーバ(クラスタ環境)でも、各サーバに画像を配備しなくてもいいなどファイル管理の手間が省けます。

デメリットとしては、画像の取得にデータベースアクセスが必要になることと、容量の問題も出てくるでしょう。

NFS やメモリ上での共有など方法はいろいろありますが、こちらもネットワークのトラフィックなどの問題もあります。

BLOB型で管理する

今回は、初めてデータベース(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();

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

Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/09/20 11:58:13時点 Amazon調べ-詳細)

あなたにオススメ