(PHP MYSQL)画像をデータベースに保存したいのですがいまいち方法が分かりません。


画像をブラウザ上から保存できる簡単なスクリプトを書いてください。お願いします。

保存するDBのSQLファイルもお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:vinaka No.1

回答回数232ベストアンサー獲得回数1

ポイント2pt

http://lists.sourceforge.jp/mailman/listinfo/seasar-php

Seasar-php �����ڡ���

ここで質問してみてはいかがでしょうか?

アバウトな質問過ぎて、回答にも困ります。


ファイル名はどうするつもりですか?

サイトで勝手につけるのですか?

拡張子は?

画像のサイズは?

出力形式は?

GDは入っているのか?

PHPのバージョンは?

Mysqlのバージョンは?

id:esecua

すいません。

ファイル名は $user.”.jpg” で考えています。

拡張子は .jpg

画像サイズは 1.5KB

出力形式 わかりません

GD 入っているか分かりません

PHP Ver5

MySQL Ver5.0.17

出力形式はわかりませんのでアドバイスをいただけたら幸いです。

よろしくお願いします。

2006/03/09 14:37:13
id:iken_jp No.2

回答回数11ベストアンサー獲得回数0

ポイント1pt

http://www.doyouphp.jp/sample/sample_ora_blob.shtml

Do You PHP? - BLOB�^�̗��p

Googleなどで検索すればすぐに見つかると思いますが....

このURLはわかりやすいと思います

id:esecua

MySQLですが。

2006/03/09 14:38:37
id:yamiwolf No.3

回答回数201ベストアンサー獲得回数13

ポイント2pt

PHP+MYSQLのWeb画像データベースです

オープンソースなのでソースコードをみながら研究してみてはいかがですか?

id:esecua

ん〜ソースコードをじっくり見ている時間はないのです。。

2006/03/09 16:00:03
id:bonlife No.4

回答回数421ベストアンサー獲得回数75

ポイント40pt

http://www.itmedia.co.jp/enterprise/0309/24/epn25.html

エンタープライズ:MySQLにファイルを格納する

ここが参考になります。


まず、画像を格納するテーブルを作成する必要があります。

テーブル作成の際、バイナリデータを扱えるフィールドを用意しておいてください。



テーブル名 : image


カラム :


・id (auto_increment)

・img_data (BLOB)


といった感じです。

(一番シンプルな例だと思います。)

PHPをお使いであれば、phpMyAdminを使ってGUIでテーブルを作成すれば簡単ですよね。


画像を保存するフィールドは1.5KB程度であればBLOB(最大サイズは64KB)で問題ありません。

より大きい画像も格納したい場合、MEDIUMBLOB(最大サイズは16MB)にしておけば良いと思います。

http://ns1.php.gr.jp/pipermail/php-users/2003-April/015326.html

[PHP-users 14794]画像データ格納時のエラー(文字化けのため再投稿)

このソースでほぼいけます。

実際に試してみました。

(もう少しキレイに書き直せそうな気もしますが、とりあえず。)


formのactionは


action=”<?echo $PHP_SELF;?>”


のように変更しておけば、ファイル名に影響されないので良いと思います。


また、


mysql_connect()、mysql_select_db()


に渡す値は環境に合ったものに変更してください。


MAX_FILE_SIZEのvalueを使ったファイルサイズチェックは実装していないようですので、PHPでサイズチェックしてエラーにする処理を入れておいた方が良いと思います。

http://www.hatena.ne.jp/1139591611

人力検索はてな - (PHP)画像アップローダーをPHPで作りたいと思います。 ただアップロードするのではなく、アップロードされた画像の縦横サイズ、ファイル自体のサイズを指定されたサイズに..

画像サイズを変更して格納したい、という場合などはGDと組み合わせてみてください。


ちょっと時間(とスキル!)がないのでキレイなサンプルソースを準備できませんが、上記の情報でトライしてみていただけませんか。

id:esecua

回答ありがとうございます。

何とかDBの格納までできました。ありがとうございます。ちょっと質問からずれますが、この格納したデータをDBから取り出し再度画像として表示させるにはどうしたらいいのでしょうか?

そのまま表示するとtü_Z8åŒ(Jv7Äh˜ßml¶jãåLëOÜn¼ÛñÁ5´Èâà}ƒÍg¯E㙫߯Ÿ¿Ê ―x.ÔwQ2ópr=øèáCvといったものが表示されます。

2006/03/09 18:27:03
id:bonlife No.5

回答回数421ベストアンサー獲得回数75

ポイント35pt

度々失礼します。

このソースあたりが参考になると思います。

後で読んでみてください。


とりあえず動かしたい、ということであれば、以下のようにしてみてください。


まず、画像表示用のスクリプトを準備します。

名前は仮に image_display.php としておきます。

idをキーにしてDBを検索し、画像の内容を返します。


image_display.php


<?

// 本来は、DB接続ができたかどうか、DBを選択できたかどうか

// SQLの結果が空ではないか、などをチェックすべきですが、省略します


// DB接続

$conn=mysql_connect(”localhost”,”user_id”,”password”);

// DB選択

mysql_select_db(”test”);

// SQL問合せ

// このphpを呼び出す際、idを指定

$result = mysql_query(”select * from image where(id=$_GET[id])”);

// 問合せ結果を配列にセット

$row = mysql_fetch_array($result);


// 本当はここでheader()で適切なContent-typeを出力した方が良いはず


echo $row[1]; // テーブルの2列目のカラムを取得


?>


表示用のスクリプトは以下の通りです。


<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”>

<title>画像表示</title>

</head>

<body>

<p>MySQLのBLOBにバイナリで格納した画像を表示してみます。 </p>

<?

echo ”<img src=¥”image_display.php?id=1¥”>”

?>

</body>

</html>


上記の例では


image_display.php?id=1


とすることで、id列の値が1の行のimg_data列に格納された画像を表示します。


※本来は参考URLにもあるようにDBに格納するファイルのMIMEもDBの別カラムに持たせておいて、その内容を元にheader()で適切なヘッダを出力すべきだと思います。

id:esecua

ありがとうございます。やっと実装できました。

2006/03/09 22:58:07
  • id:gekikawa

    // 本当はここでheader()で適切なContent-typeを出力した方が良いはず

    とあるように
    header("Content-type: image/jpeg");
    をつけておかないとブラウザによっては表示できませんよ

この質問への反応(ブックマークコメント)

トラックバック

  • 技術メモ のびさん (PukiWiki/TrackBack 0.4) 2007-05-03 06:17:21
    メモです。 プログラミング等、まだまだ初心者なので とりあえずやったことメモっとく 間違い、プログラムが稚拙などありますが。 ただの私的メモなので了承してください。 読んでいる
  • CakePHPで画像をMySQLに登録 すぐ忘れそうなのでメモ。 MySQLのフィールドはBLOB型。 controllerファイルの中で完結。 // 登録 function add() { $image = &#39;&#39; if (!empty($this-&gt;data)) { if ($fp = fopen($this-&gt;da
  • 画像掲示板を作る・1 下のやつに画像を追加しようと思います。 参照 http://q.hatena.ne.jp/1141838059 http://ml.php.gr.jp/pipermail/php-users/2003-April/015326.html
  • @(2).htaccess {{{ &lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteBase /products/catalog # baseURL(本.htaccessの配置場所)を指定。 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1
  • @(2).htaccess {{{ &lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteBase /products/catalog # baseURL(本.htaccessの配置場所)を指定。 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません