山内の授業のページ/08春/プロジェクト

アクセス数 700  このページの最終更新 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を送り出すようにする必要がある。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-05-24 (金) 13:25:33 (1641d)