PHPでMySQLに格納したファイルをダウンロードする方法

このQ&Aのポイント
  • PHPを使ってMySQLに格納したファイルをブラウザからダウンロードする方法について教えてください。
  • PHPを使ってブラウザからMySQLに画像やファイルをアップロードできたのですが、取り出す方法が分かりません。バイナリデータを取り出し、ブラウザに画像を表示する方法についても教えてください。
  • MySQLサーバに格納したファイルをPHPを使ってダウンロードするプログラムを作りたいのですが、方法が分からず困っています。簡単なスクリプトや手順を教えてください。
回答を見る
  • ベストアンサー

PHPでMySQLに格納したファイルをダウンロードしたいです。

MySQLサーバに格納したファイルをPHPを使ってブラウザからファイルをダウンロードするプログラムを作りたいのですが、やり方が分からず困っています。方法もしくは簡単なスクリプトを教えてください。お願いします。 PHPを使ってブラウザからMySQLに画像やファイルをアップロードできたのですが、取り出す方法が分かりません。バイナリデータを取り出してimage srcを用い、ブラウザに画像を表示するまではできました。 テーブルは create table image( ID int not null primary key auto_increment, data MEDIUMBLOB); で作成しています。 ご教授お願いします。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

header関数で適当なヘッダを送信した後ファイルの内容を出力するのが一般的な方法かと思われます。 http://www.php.net/manual/ja/function.header.php

関連するQ&A

  • mysqlに保存した画像の表示がうまくいかない

    phpとmysqlで検索システムを作っています。 今回、mysqlにテキストデータと一緒に画像も保存し検索結果を表示する時に画像も一緒に表示されるようにしたいと考えています。 ひとまずテキストデータは問題なく保存、検索、表示ともに正常に動作していますが、画像がどうしてもうまく表示されません。 DB内を確認してみると、保存はきちんとされているようなのですが。 わかる方がいらっしゃいましたら、アドバイスをいただけないでしょうか? 以下にコードの内容を記載します。テキストデータは正常に動作するので、画像の表示に関する部分だけ記載させて頂きます。 ※検索結果の該当フィールドのidをキーとして渡して、該当するidの画像(DB内のimage1)を表示する。 よろしくお願いします。 【mysqlテーブル】 create table entries ( id int not null auto_increment primary key, name varchar(255), address varchar(255), image1 MEDIUMBLOB NOT NULL, image2 MEDIUMBLOB NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 【result.php】 //画像表示箇所 <?php echo '<img src="get_image.php?id=' . $row['id'] . '">' ?> 【get_image.php】 <?php $id = $_GET['id']; header('Content-Type: image/jpg'); echo $row['image1']; ?>

    • ベストアンサー
    • PHP
  • PHPデータをMYSQLに格納

    こちらのmysqlのフィールドが 1. CREATE TABLE `temp_upload` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL default '',`mime` varchar(255) NOT NULL default '',`image` longblob NOT NULL, `created` timestamp(14) NOT NULL, PRIMARY KEY (`id`)) の場合では下記のコードを入力してBLOBに画像の格納が出来ました。 # // 追加SQL作成 # $sql = sprintf( 'INSERT INTO temp_upload ( name, mime, image ) VALUES ( "%s", "%s", "%s" )', # mysql_real_escape_string( $_FILES['image']['name'] ), # mysql_real_escape_string( $_FILES['image']['type'] ), # mysql_real_escape_string( $image ) ); # # # $result = mysql_query( $sql ); # # header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); # exit; # # } ただしもmysqlのフィールド数がもっとある場合はどのように記述をすればいいのでしょうか。 色々と調べ、なんども変更を加えて試してもみたのですがどうしてもmysqlにデータ・画像が格納されません。 こちらがその全然動かないコードになります。 $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ("$sname","$str_check1", "$sonohoka", "$train", "$ken", "$add1", "$stime", "$holiday", "$denwa", "$menu1", "$menu2","$url", "%s", "%s", "%s" )',     mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); $result = mysql_query( $sql ); header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); exit; } 大変申し訳ないのですが、どなたかお分かりになるかたご教授お願い出来ませんでしょうか?

    • 締切済み
    • PHP
  • PHPでMySQLのMEDIUMBLOB型のデータを取り出す

    初めまして、宜しくお願いします。 現在ユーザ登録の管理をするデータベースを扱っています。 言語はPHP4と、MySQLを使用しています。 そのデータベースには、アイコン画像、登録者名、性別、 掲示板発言回数などのユーザー情報が保存されており、 データ型[MEDIUMBLOB]にまとめて保存されているようです。 (データベースは私が作成したものではいのですが) なのでそこから、それらの情報を取り出したいのですが、 [MEDIUMBLOB]型のデータの取り出し方が解らず困っています。 具体的にはデータだけならば取り出す事はできるものの、 バイナリ形式なので当然文字化けしているという感じです。 勉強不足ということは百も承知ですが、検索しても それらしい情報を見つけることもできず、ご存じの方が おられないかとこちらにて質問をさせていただきました。 お解りの方がおられましたらどうかアドバイスを 宜しくお願い致します。 -------------------------- // 以下のようなテーブルにデータが格納されていた場合 CREATE TABLE sample(   test_i INT,   test_s VARCHAR(64),   medium MEDIUMBLOB ); // 格納されているデータを取り出す $res = mysql_query( "SELECT test_i, medium FROM sample;" ); while( $list = mysql_fetch_assoc( $res ) ){   echo "$list['test_i']<br>";  //echo "$list['medium']<br>"; } 上記の通りをMEDIUMBLOB型ですると文字化けします。

    • ベストアンサー
    • PHP
  • PHP+MYSQLにおける、画像の表示について。

    いつも参考にさせていただいております。 ありがとうございます。 さて、表題の件ですが、現在、画像掲示板を作成中です。 テーブルの作成が終わり、アップロードするPHPまでは完了。 画像がバイナリで保存されるところまでは作成が完了しました。 次に、呼び出しのPHPを作成しようと現在作成中ですが、ここで躓づきました。 テーブル Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | commentid | int(3) | YES | | NULL | | | comment | mediumtext | YES | | NULL | | | picture1 | mediumblob | YES | | NULL | | このテーブルの中に、レコードが5つあり、それぞれカラムpicture1に画像データを持たせてあります。 このテーブルに対して、 <?PHP $s=mysql_connect("localhost","root","password") or die("登録フォーム接続に失敗しました。"); mysql_select_db("smartphone"); $result = mysql_query("SELECT * FROM commentmaster"); while($row = mysql_fetch_array($result)){ header("Content-type: image/jpeg"); print($row[3]); } exit(); ?> <html> <head> <title>コメント一覧</title> </head> </html> 以上のPHPファイルで画像の呼び出しをしようとしたのですが、 1枚目の画像は表示されるものの、2枚目以降の画像が表示されません。 ちなみに、 header("Content-type: image/jpeg"); print($row[3]); の部分を、 #header("Content-type: image/jpeg");←コメントアウトした。 print($row[0]);←picture1ではなく、IDを取得に変更 このように変更すると、カラム0のIDが5つ表示されます。 過去のコメントを拝見したのですが、機能的に無理なものなのか、書き方が悪いだけなのか。 また、別の方法があるのかの判断が付きませんでしたので、質問をさせていただきました。 お手数をおかけしますが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLの浮動小数点の定義について

    いまMySQLの浮動小数点の定義を行っているのですが, ↓↓↓↓↓ create talbe [table_name]( id int not null auto_increment, data1 double [(1)], primary key(id) ); の(1)のdouble型の精度の宣言方法が分かりません…。 どうやって宣言すればいいのか教えていただけませんか? 具体的に例を挙げていただけたら幸いです。

  • phpからmysqlにデータ保存(テキストと画像)

    登録フォームを作成し、PHPにてMYSQLに情報を保存しようとしています。 テキストデータは問題なく保存できるのですが、画像データが保存できません。 いろいろ調べているのですが、テキストデータと画像データをいっぺんに保存する方法がわかりません。 なんとなくはどこらへんが問題なのかということはわかるのですが、具体的にどうすればいいかがわかりません。 アドバイスをご教示いただけないでしょうか。よろしくお願いします。 【mysqlテーブル】 create table entries ( id int not null auto_increment primary key, name varchar(255), address varchar(255), image1 MEDIUMBLOB NOT NULL, image1 MEDIUMBLOB NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 【touroku.php】 <?php error_reporting(E_ALL & ~E_NOTICE); if ($_SERVER['REQUEST_METHOD']=="POST") { $name = $_POST['name']; $email = $_POST['email']; $image1 = $_POST['image1']; $image2 = $_POST['image2']; $error = array(); // エラー処理 if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $error['email'] = 'メールアドレスが正しくありません'; } if ($email == '') { $error['email'] = 'メールアドレスが入力されていません'; } // エラーがなかった場合 if (empty($error)) { // DBにデータを入れる mysql_connect("localhost", "ユーザー名", "パスワード") or die("can't connect to DB: ".mysql_error()); mysql_select_db("DB名") or die("can't select to DB: ".mysql_error()); $q = sprintf("insert into entries (name, email, image1, image2) values ('%s', '%s', '%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email), mysql_real_escape_string($image1), mysql_real_escape_string($image2)); mysql_query($q) or die("can't run query: ".mysql_error()); // 登録完了画面に飛ぶ header("Location: http://localhost/.../thanks.html"); } } ?> <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <title>登録フォーム</title> <head> </head> <body> <form method="post" action=""> <p>名前:</p> <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>"> <?php if ($error['name']) echo $error['name']; ?> <p>メールアドレス</p> <input type="text" name="email" value="<?php echo htmlspecialchars($email); ?>"> <?php if ($error['email']) echo $error['email']; ?> <br> <p>画像1:</p> <input type="file" name="image1"> <p>画像2:</p> <input type="file" name="image2"> <p><input type="submit" value="登録"></p> </form> </body> </html>

    • ベストアンサー
    • PHP
  • MySQLでのバイナリデータ削除方法

    MySQLでのバイナリデータ削除方法 現在、PHPとMySQLでデータベースを作っている初心者です。 MySQLに登録したBLOB型のバイナリデータ(jpeg画像)を削除することはできるのでしょうか。 PHPMyAdminではレコード自体は消せますが、バイナリデータについては編集不可となっています。このフィールドのみ空にすることはできるのでしょうか。 考え方、方法などご教示ください。 上書きでNULLをインサートする??のかとも思うのですが、よくわかりません。 MySQL 5.1.34 PHP 5.2.6

    • ベストアンサー
    • MySQL
  • MySQLでエラーがでます

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"8cb2237d0679ca88db6464eac60da96345513964", created"2011-10-05 15:16:04"' at line 1 PHPをブラウザで開いて動作確認すると上記のようにエラーがでてしまいます。 dbはこんな感じで作りました。 CREATE TABLE `class_orms`.`members` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 255 ) NOT NULL , `email` VARCHAR( 255 ) NOT NULL , `password` VARCHAR( 100 ) NOT NULL , `created` DATETIME NOT NULL , `modified` TIMESTAMP NOT NULL ) ENGINE = MYISAM ; CREATE TABLE `class_orms`.`posts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `message` TEXT NOT NULL , `member_id` INT NOT NULL , `reply_post_id` INT NOT NULL , `created` DATETIME NOT NULL , `modified` TIMESTAMP NOT NULL ) ENGINE = MYISAM ; SQL側の1行目でエラーがあるということなのでしょうか? どなたか回答よろしくお願いします。 動作環境------------------- Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 phpMyAdmin バージョン情報: 3.2.4

    • ベストアンサー
    • MySQL
  • phpとmysqlでサイトのコンテンツを制作しているのですが...

    phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

    • 締切済み
    • PHP
  • SQLへファイルを格納

    PHP+MySQL(接続にはDB.phpを利用)を利用してフォームからファイルを アップしてそれをDBに格納するプログラムを組んでいるのですが データベースの構造は CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `filedata` longblob, `kaku` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ; 下記がそのプログラムの処理部分です。 $data = file_get_contents($_FILES['upfile']['tmp_name']); $sql ="INSERT INTO test(filedata,kaku) VALUES('$data','$kaku')"; $DbObj->DBSQL($sql); ・$DbObj DB.phpを利用してのデータベース接続オブジェクト(クラス)で クラスの中身は商用のWebアプリの開発用のため掲示できませんが この処理以外は正常に動いています。 $sql ="INSERT INTO test(filedata,kaku) VALUES('11','$kaku')"; では正常動作確認しています。 ・$kaku ファイルの拡張子を格納している(拡張子はファイルを取りだ時に利用) 主キーはauto_incrementを利用しているのでINSERT文で設定の必要なし。 って状況で実行をすると DB Error: syntax error とエラーをはき処理できません。 どのようにしたらデータベースに格納できのでしょうか?

    • ベストアンサー
    • PHP