あるエンジニアの独り言

MySQLのBLOBに入ったPDFを表示する

最終更新:

paladin

- view
管理者のみ編集可

2010/01/05

MySQLでBLOB型の列にPDFファイルを挿入して、ブラウザで取り出して
表示する方法を友人に聞かれて答えられなかったので調べてみた。

BLOBについて簡単におさらい。
BLOB は様々な大きさのデータを保持する事ができる大きいバイナリオブジェクトです。
4つの BLOB タイプは、TINYBLOB、 BLOB、MEDIUMBLOB、そしてLONGBLOB です。
MySQL5.1リファレンスマニュアルより

DBに格納するところまではできたそうなので、取り出すところだけやってみる。

テーブル構造はこんな感じ
DB名:blobtest
テーブル名:test
フィールド 種別 備考
id int 一意になるコード
data longblob 今回の本命、バイナリデータ

格納データはこんな感じで準備
id data
0 (PDFデータ)
1 (画像データ)
いずれもネットで拾ってきたデータ。

PHPのファイルはバイナリデータそのものを返す"view_data.php"
バイナリデータを呼び出す"view_main.php"の2ファイルを用意。

view_data.php
  1. <?php
  2. header('Content-type: application/pdf');
  3.  
  4. //MySQLサーバに接続
  5. $con = mysql_connect("server", "user", "password");
  6. IF (!$con){
  7. print("MySQLへの接続に失敗しました");
  8. exit;
  9. }
  10.  
  11. //DB接続
  12. IF (!mysql_select_db("blobtest")){
  13. print("データベースへの接続に失敗しました");
  14. exit;
  15. }
  16.  
  17. $sql = "select data from test where id=0";
  18.  
  19. $result = mysql_query($sql);
  20.  
  21. $row = mysql_fetch_array($result);
  22.  
  23. echo $row[0];
  24.  
  25. ?>

view_main.php
  1. <html>
  2. <head>
  3. <meta http-equiv=”Content-TYPE” content=”text/html; charset=UTF-8>
  4. <title>PDF表示</title>
  5. </head>
  6. <body>
  7. <a href="view_data.php" target="new">PDF表示</a>
  8. </body>
  9. </html>
※ここまで書いて気づいたけど、"view_main.php"はただのHTMLでよかった。

ファイルは別窓に表示したいということだったので、
a タグには target="new" を入れている。
もしクリックした時に表示ではなくダウンロードにしたいなら、
"view_data.php"の3行目に下記の1行を追加すればOK。
  1. header('Content-Disposition: attachment; filename="downloaded.pdf"');

最低限のことしか記述してないけど、伝わると幸いです。
今回はここまで。




=============== <<<ここから宣伝(自動追加)>>> ===============
ウィキ募集バナー