メコログ

web関連の話や、日々の雑記を書こうと思っています。

mysqlに画像を保存するプログラム[php]

mysqlで画像扱うphpプログラムを作成しました。(動作確認済み
プログラムを扱う際のデータベースの設定も記述します。これで、mysqlで画像をバッチリ扱えるようになると思います。
 
 

プログラム内容

  • 画像をデータベースに保存するプログラム
  • データベースから画像を呼び出し、表示するプログラム

 
 

プログラムを利用するための設定

データベースの設定
ホスト名 データベース名 テーブル名 ユーザ名 パスワード
localhost test_field img_table root なし
テーブルの設定

こんな内容のテーブルをphpMyAdminを使うなどして作成してください。

各カラムの役割 id_col(画像の管理番号) img_col(画像の格納)

ここで画像を保存する際にmediumblobを今回は用いていますが、データベースで扱う画像のサイズによってここは変える必要があります。

扱う画像のサイズと種別の対応表
種別 最大のサイズ
TINYBLOB 256 byte
BLOB 64 KB
MEDIUMBLOB 16 MB
LONGBLOB 4 GB

これで、データベースの設定は終わりです。次にプログラムを利用してみましょう。
 
 

プログラムの利用

set_img.php(画像をデータベースに保存するプログラム
<?php
//データベースに接続する変数名を宣言しておく
define( 'DB_HOST', 'localhost' );
define( 'DB_USER', 'root' );
define( 'DB_PASS', '' );
define( 'DB_NAME', 'test_field' );

//データベースに接続する	
$db_link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//取得する画像のリンク
$img_url = 'http://cdn-ak.f.st-hatena.com/images/fotolife/m/mekori/20130503/20130503074329.jpg';

// 画像の取得
$img_file = file_get_contents( $img_url );

//画像取得が成功した場合
if($img_file){	

	//画像をバイナリに変換
	$img_binary = mysqli_real_escape_string( $db_link, $img_file );
	
	//画像を保存するSQL文の実行
	$result = mysqli_query( $db_link, 'INSERT INTO img_table (img_col) VALUES ( "'.$img_binary.'" )');
	
	//結果の表示
	if($result){echo "画像をデータベースに保存しました。";}else{
		echo "保存できませんでした。";
		}
}

?>


view_img.php(データベースから画像を呼び出し表示するプログラム
<?php
//データベースに接続する変数名を宣言しておく
define( 'DB_HOST', 'localhost' );
define( 'DB_USER', 'root' );
define( 'DB_PASS', '' );
define( 'DB_NAME', 'test_field' );


//下の2つの関数を使い、id_colが1の画像を表示する。
CallImg(1);


//指定したid_colを持つ画像を表示する関数
function CallImg($id_col_num){
	echo '<img src="'.ImgSearchDB($id_col_num).'">';
}

//データベースから、指定したid_colを持つimageファイルを検索する関数。
function ImgSearchDB($id_col_num){
		
	//データベースへ接続する
	$db_link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
	
	//指定したidのimgを検索
	$serch_query = mysqli_query($db_link,"SELECT * FROM `img_table` WHERE `id_col` ='".$id_col_num."'");
	$row = mysqli_fetch_array($serch_query);
	
	header( 'Content-Type: image/jpeg' );
	echo $row['img_col'];
	
	$close_flag = mysqli_close($db_link);
}
?>
プログラムの解説
  • set_img.phpの$img_urlで画像のリンクを指定し、ファイルを実行するとデータベースに画像が保存されます。
  • view_img.phpを実行すると、CallImg()関数が実行されます。今回は引数に1が設定されているのでid_colが1に対応する画像が表示されます。

 
 
方法の解説は以上です。
引数をGETやPOSTの値に設定したりすると、よりサービスに実用的な感じになるかと思います。