mysqlに画像を保存する方法(PHP)
ネットに公開されているソースが動かないものばかりだったので、
動作確認したものを載せておきます。
本ソースの目的はこんな感じです
こうやって記述してみるとものすごくシンプル!
それでは説明を始めていきます
1.画像を保存するテーブルを作成する
mysqlにテーブルを用意します。
テーブルは画像表示に必要最小限のもので話を進めていきます。
phpMyAdminなどを使って以下のテーブルを用意してください。(mysql文忘れちゃったので細かいところは省略)
- テーブル名:temp_upload(例としてなので、お好きな名前でどうぞ)
- カラム1: カラム名:id 種別:int(8) その他:AUTO_INCREMENT
- カラム2: カラム名:image 種別:MEDIUMBLOB
保存する画像のサイズにあわせてどのBLOBにするか変更しておいてください。
TINYBLOB: 256 byte
BLOB: 64 KB
MEDIUMBLOB:16 MB
LONGBLOB: 4 GB
2.3つのファイルを作成する
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/