mysqlに画像を保存する方法(PHP)

ネットに公開されているソースが動かないものばかりだったので、
動作確認したものを載せておきます。


本ソースの目的はこんな感じです
  1. amazonにある特定の商品の画像をmysqlに取り込む
  2. データベースから画像を読み込んで表示する

こうやって記述してみるとものすごくシンプル!
 それでは説明を始めていきます



1.画像を保存するテーブルを作成する

mysqlにテーブルを用意します。
 テーブルは画像表示に必要最小限のもので話を進めていきます。


 phpMyAdminなどを使って以下のテーブルを用意してください。(mysql文忘れちゃったので細かいところは省略)

  1. テーブル名:temp_upload(例としてなので、お好きな名前でどうぞ)
  2. カラム1:  カラム名:id    種別:int(8)  その他:AUTO_INCREMENT
  3. カラム2:  カラム名:image  種別:MEDIUMBLOB

 保存する画像のサイズにあわせてどのBLOBにするか変更しておいてください。
   TINYBLOB: 256 byte
   BLOB: 64 KB
   MEDIUMBLOB:16 MB
   LONGBLOB: 4 GB




2.3つのファイルを作成する
  1. upload.php(画像をアップロードするファイル)
  2. view.php(画像を読み込むファイル)
  3. index.php(view.phpを使って任意の画像を読み込んで、任意の場所に表示させる)


upload.php

<?php
define( 'DB_HOST', 'ホスト名を記述(例えばlocalhost)' );
define( 'DB_USER', 'ユーザー名を記述(例えばroot)' );
define( 'DB_PASS', 'パスワードを記述' );
define( 'DB_NAME', 'データベース名を記述' );
{
    // DBに取り込む画像のパス
  $img_path = 'http://ecx.images-amazon.com/images/I/61vSkV4-rwL.jpg';//例として、この時一番売れてる本の画像にしておきました。
	 
    // データベースに接続
    $DB = mysql_connect( DB_HOST, DB_USER, DB_PASS );
    mysql_select_db( DB_NAME, $DB );
 
    // 画像の取得
    $image = file_get_contents( $img_path );
 
    // SQL文の作成
    $sql = sprintf( 'INSERT INTO temp_upload (image ) VALUES ( "%s" )',
                    mysql_real_escape_string( $image ) );
  
  // SQL文の実行
    $result = mysql_query( $sql );
}
?>


view.php

<?php
define( 'DB_HOST', 'ホスト名を記述(例えばlocalhost)' );
define( 'DB_USER', 'ユーザー名を記述(例えばroot)' );
define( 'DB_PASS', 'パスワードを記述' );
define( 'DB_NAME', 'データベース名を記述' );
{
  // データベースに接続
  $DB = mysql_connect( DB_HOST, DB_USER, DB_PASS );
  mysql_select_db( DB_NAME, $DB );
 
  // 表示するイメージのIDをパラメータから取得
  $id = isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0;
  $sql = sprintf( 'SELECT * FROM temp_upload WHERE id = %d', $id );
 
  // データの取得
  $result = mysql_query( $sql );
  $row = mysql_fetch_array( $result, MYSQL_ASSOC );
 
  // 画像を出力
  header( 'Content-Type: image/jpeg' );
  print $row['image'];
}
?>


index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript; charset=utf-8"/>
<head>
  <title>show image</title>
</head>
 
<body>
<img src="./view.php?id=0" /> //id=【】の部分に呼び出したい画像のidを記述してください。
</body>
 
</html>

これで、upload.php実行後にindex.phpを実行すると画像が表示されると思います。
 より実践的に使おうとするならば、カラムを増やしてISBNなどで呼び出すと良いかもしれません。
 とりあえず、動かすだけならこんなんで動かすことができます。

 index.phpのimgタグで呼び出すIDは、phpMyAdminなどでちゃんとデータが格納されているか確認しながら行ったほうがいいかも。 


 自分こんなサイト運営しているので、良かったら訪問してみてください!
 はてブボタンも押してもらえると励みになります!
 http://hatenanotebook.com/