これは嬉しい見つけもの。 感謝!
・Sample Script を見つけたのでメモっとく。
アップロードした画像をデータベース(MySQL)に直接保存するやり方とその表示方法の簡単なメモ
まずは、データベースの準備
・最小限のテーブル構成例
dataが実際の画像のバイナリデータを入れる所。 BLOB型だと最大64KB、MEDIUMBLOB型だと最大16MBまでの画像が格納できる。
mimeは画像のMIMEタイプを格納するためのフィールドで、 「フォームから受け取ったMIMEタイプを素直に信用して格納する」 という方針で準備。(実際にはisset関数などを使ってチェック→error表示か?)
・次画像アップロード用のフォームではenctype を multipart/form-data にして、受信スクリプトへのパスを action で指定しておく。
・最小限のテーブル構成例
//image_tableのような感じで・・
id int(11) unsigned not null auto_increment primary key,
mime varchar(50) not null,
data MEDIUMBLOB not null
dataが実際の画像のバイナリデータを入れる所。 BLOB型だと最大64KB、MEDIUMBLOB型だと最大16MBまでの画像が格納できる。
mimeは画像のMIMEタイプを格納するためのフィールドで、 「フォームから受け取ったMIMEタイプを素直に信用して格納する」 という方針で準備。(実際にはisset関数などを使ってチェック→error表示か?)
・次画像アップロード用のフォームではenctype を multipart/form-data にして、受信スクリプトへのパスを action で指定しておく。
<form method='post' enctype='multipart/form-data' action='パス'>・受信スクリプト。フォームから受け取ったデータを簡単なチェックの後データベースに格納。
<input type='hidden' name='MAX_FILE_SIZE' value='最大バイト数'>
<input type='file' name='imagefile'>
<input type='submit' name='upload' value='アップロード'>
form>
if($_FILES['imagefile']['error']) exit;
$mime = $_FILES['imagefile']['type'];//mime type
$path = $_FILES['imagefile']['tmp_name'];//uploaded file
if($mime=='image/pjpeg') $mime='image/jpeg';
if($mime=='image/x-png') $mime='image/png';
if(is_uploaded_file($path))
{
$mime = addslashes($mime);
$data = addslashes(file_get_contents($path));//一時ファイルの読み込み
$sql = "insert into image_table (mime,data) values ('$mime','$data')";
$db->query($sql);//略記
}
アップロードされた一時ファイルを直接 file_get_contents で読み込んでるが、サーバーによっては、move_upload_file でファイルを移動してから file_get_contents で読み込む必要あり。
・保存したファイルをidを指定して表示してみる。
・保存したファイルをidを指定して表示してみる。
//image.php・実際は、この表示スクリプトへのパスをimgタグに埋め込んで使う。
$id = intval($_GET['id']);
$sql = "select * from image_table where id=$id";
if($image = $db->findone($sql))//1レコード取得(略記)
{
header("Content-type: ".$image['mime']);
echo stripslashes($image['data']);
}
<img src='./image.php?id=1'>
※コメント投稿者のブログIDはブログ作成者のみに通知されます