アクセス数 1164 このページの最終更新 2013-05-24 (金) 13:25:33
アップロードのサンプルコード(2011バージョン=ファイルをcreateせず、 画像データをデータベース内にバイナリデータとして保存する方法)
uptest.htmlファイル
<html> <body> <form enctype="multipart/form-data" action="uploadaction.php" method="POST"> <!-- MAX_FILE_SIZE はファイルフィールド用に必須です --> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- input 要素の名前が $_FILES 配列での名前となります --> <input name="uptest" type="file" /> <input type="submit" value="ファイルを送信" /> </form> </body> </html>
uploadaction.phpファイル
<?php print("<html><body>"); $fname = $_FILES['uptest']['tmp_name']; //この情報は決めうち $foriginalname = $_FILES['uptest']['name']; $content = file_get_contents($fname); include(".ht_mytest"); $MyLink = mysql_connect($MySQLHost, $MySQLUserName, $MySQLPassword); mysql_select_db($MySQLDatabase, $MyLink); $user = "Taro"; //この情報は本番ではどこからか持ってくること $content2 = mysql_real_escape_string($content); // このおまじないは必須 $MyQuery = "INSERT into blubtest values ('$title','$content2','$user')"; $MyResult = mysql_query($MyQuery, $MyLink); $MyQuery = "SELECT * FROM blubtest"; //テーブル名はblubtestとしてある $MyResult = mysql_query($MyQuery, $MyLink); while ($MyRow = mysql_fetch_array($MyResult, MYSQL_ASSOC)) { $title = $MyRow["title"]; $name = $MyRow["name"]; print("<hr>\n" . $title . " | " . $name . "<br>\n"); print('<img src="show.php?title=' . $title . '">'); //show.phpは別途定義 } mysql_free_result($MyResult); mysql_close($MyLink); print("</body></html>"); ?>
show.phpファイル
これは<img>タグのsrc部分に書かれるファイル名で、普通ならsrc="xxx.gif"とかイメージファイルのファイル名を書くのだが、ここでは「イメージデータを(データベースから読み出して端末へ送り出してくれるPHPプログラム」を置く。ちなみに、show.phpの引数として、show.php?title=ホゲホゲのように、画像データにつけた「タイトル」を渡す。
<?php // MySQLから画像データの入った列を読み込む $title = $_GET['title']; include(".ht_mytest"); $MyLink = mysql_connect($MySQLHost, $MySQLUserName, $MySQLPassword); mysql_select_db($MySQLDatabase, $MyLink); $query = "select * from blubtest where title='" . $title . "'"; //テーブル名blubtest、属性名title $result = mysql_query($query); $row = mysql_fetch_row($result); // 画像ヘッダとしてgifを指定 (JPEGの時は image/jpeg を指定すること) print(header("Content-Type: image/gif")); // バイナリデータを直接表示。DBの表の要素1(=2番目)のカラム(属性) print $row["1"]; ?>
注意: 下から4行目のところでContent-Type: image/gifを送出しているため、GIFファイルに限定される。JPEGファイルを描画したければimage/jpegと指定する。
データベース中のバイナリデータの種類を区別して、どちらでも描画できるようにするためには、データベースに画像を登録するときにどちらの形式であるか(gifかjpegか)を書いておくフィールドを設け、書いておく。描画するときにそれを読み出して、gifかjpegかに応じて、異なるheaderを送り出すようにする必要がある。