- ベストアンサー
PHP・MySQLでの画像保存方法
- MySQLで画像を保存する方法には、直接DBに登録する方法(BLOB型)とディレクトリに画像を格納する方法があります。
- 直接DBに画像を保存する方法は画像の管理が容易であり、データのバックアップも簡単に行えますが、データベースの容量が大きくなるなどのデメリットがあります。
- 一方、ディレクトリに画像を格納する方法はデータベースの容量を節約することができますが、画像の管理が複雑になり、バックアップにも手間がかかります。
- みんなの回答 (1)
- 専門家の回答
関連するQ&A
- php,mysqlにて画像パス保存/表示につい
mysqlに画像パスを格納しておき、phpでブラウザに表示するという部分について質問があります。 以前画像を扱った際は、DBにそのまま画像データを格納していたのですが、一般的ではないということで画像パス使う方針にしました。 画像パスはthumbnailというカラムにvarcharで画像パスを格納しました。 今回ご相談させていただいた件では、主に画像の表示の部分にアドバイスをいただければと考えています。 以前画像をそのまま保存し表示するときは、get_image.phpのようなファイルを噛ませ、それをブラウザに読み込ませることで表示していたのですが、画像パスでも同じようなやり方でいいのでしょうか? ネットで調べてみたのですが、何となくしっくりこないというか、私の誤解もあるかもしれないのですがすっきりせず迷走中です。 どうか、アドバイスをご教示いただけないでしょうか。 ※以下は、試しにget_image.php噛ませてみた際のコードです。 <?php $id = $_GET['id']; //DB接続 ~省略~ $sql = "SELECT image FROM テーブル名 WHERE id='$id'"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました<BR>"); echo(mysql_errno().": ".mysql_error()); exit; } $row = mysql_fetch_array($result); mysql_close($con); $img_path = '$row['image']' $img = file_get_contents($img_path); header('Content-type: image/jpg'); echo $img; ?>
- ベストアンサー
- PHP
- MySQLのBLOBにバイナリで格納した画像を表示
現在PHPを勉強しはじめた初心者です。今 MYSQLのデータベースを利用してUPLOADした画像を表示させたいと思っております。 そこでMYSQLのBLOBに画像を保存出来まではできたのですが、 そこから表示させる方法がどうしても分かりません。。 こちらが今やっていますスクリプトになります。 <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”> <title>画像表示</title> </head> <body> <p>MySQLのBLOBにバイナリで格納した画像を表示してみます。 </p> <?php echo <img src=”image_display.php?id=1”> ?> <?php $conn=mysql_connect('localhost','aaa','pass'); // DB選択 mysql_select_db(”alpha”); // SQL問合せ // このphpを呼び出す際、idを指定 $sql = select * from beta where(id=$_GET[id]); $result = mysql_query($sql); // 問合せ結果を配列にセット $row = mysql_fetch_array($result); echo $row[1]; // テーブルの2列目のカラムを取得 ?> </body> </html> 自分ではいったいなにが悪いのか分かりません。 どのたかお分かりになるかたいましたらご教授していただけませんでしょうか。 お願いします。
- 締切済み
- MySQL
- PHP・MySQLでの画像(BLOB型)表示方法
初めまして。PHP・MySQLの初心者で大変恐縮ではございますが、 お力を貸していただければ嬉しく思います。 現在、商品を紹介するシステムを制作しておりまして、 PHPを使ってMySQLに画像をBLOB型(mediumblob)で保存し、 単体表示するところまではできました。 しかし、私が実装したい事としまして、商品の一覧表示として 「商品のメイン画像」と 「商品の支払い方法をOKとNGで2つの画像を選択して表示」 (例えば、銀行振込OKという画像と銀行振込NGという画像をその商品によって使い分ける) ような形でMySQLに登録し、表示したいと思っております。 そこで商品1つにつき、その都度「OK」「NG」の画像を登録してもよかったのですが、 リレーションを設定した方が効率がいいと思い、商品のメイン画像の含まれた紹介するメインテーブルと 支払い方法画像テーブルの2つをMySQLに登録しました。 【商品紹介メインテーブル】 テーブル名:lineup id---- name -------main_images----------- mime------- ・・・ 1 ---- item1 ---- [BLOB - ××KiB] ----- image/jpeg ---- ・・・ 2 ---- item2 ---- [BLOB - ××KiB] ----- image/jpeg ---- ・・・ ・・・ -- ginkouhurikomi_images ---- creditcard_images ・・・ ---------- hurikomiOK ---------------- creditcardOK ・・・ ---------- hurikomiNG ---------------- creditcardNG 【支払方法画像テーブル】 テーブル名:lineup_houhou id--------- name --------- houhou_images ------- mime 1 ---- hurikomiOK------- [BLOB - ××KiB] ---- image/gif 2 ---- hurikomiNG------- [BLOB - ××KiB] ---- image/gif 3 ---- creditcardOK ---- [BLOB - ××KiB] ---- image/gif 4 ---- creditcardNG ---- [BLOB - ××KiB] ---- image/gif ここで、lineup_houhouテーブルの「name」とlineupテーブルの「ginkouhurikomi_images」をリレーションし lineup_houhouテーブルの「houhou_images」を呼び出す為に、下記記載のindex.phpファイルに 【(1)】 $recordSet = mysql_query ("SELECT m.houhou_images, i.* FROM lineup i, lineup_houhou m WHERE i.ginkouhurikomi_images=m.name ORDER BY id DESC"); としました。 また、一覧表示をするファイルとして用意してあるのが 【index.php】 <?php require ("dbconnect.php"); $recordSet = mysql_query ("SELECT m.houhou_images, i.* FROM lineup i, lineup_houhou m WHERE i.ginkouhurikomi_images=m.name ORDER BY id DESC"); ?> <html> <table> <tr> <th>ID</th> <th>商品名</th> <th>商品画像</th> <th>銀行振込画像</th> <th>クレジットカード支払画像</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php echo (htmlspecialchars($table["id"])); ?></td> <td><?php echo (htmlspecialchars($table["name"])); ?></td> <td><img src="view.php?id=<?php echo (htmlspecialchars($table["id"])); ?>" /></td> <td><img src="view01.php?id=<?php echo (htmlspecialchars($table["houhou_images"])); ?>" /></td> <td><img src="view02.php?id=<?php echo (htmlspecialchars($table["〇〇〇〇"])); ?>" /></td> </tr> <?php } ?> </table> 【view.php】 <?php require ("../dbconnect.php"); $id = intval ($_GET["id"]); $mime = null; $sql = "SELECT main_images FROM lineup WHERE id = $id"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました"); echo (mysql_errno().": ".mysql_error()); exit; } if (mysql_num_rows($result) == 0) { $sql = "SELECT main_images, mime FROM lineup WHERE id = 1"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました"); echo (mysql_errno().": ".mysql_error()); exit; } } $row = mysql_fetch_row ($result); $imgdat = base64_decode ($row[0]); header ("Content-Type:".$mime); echo $imgdat; mysql_close (); ?> 【view01.php】 <?php require ("../dbconnect.php"); $id = intval ($_GET["id"]); $mime = null; $sql = "SELECT houhou_images FROM lineup i, lineup_houhou m WHERE i.ginkouhurikomi_images=m.name"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました"); echo (mysql_errno().": ".mysql_error()); exit; } if (mysql_num_rows($result) == 0) { $sql = "SELECT houhou_images, mime FROM lineup i, lineup_houhou m WHERE i.ginkouhurikomi_images=m.name"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました"); echo (mysql_errno().": ".mysql_error()); exit; } } $row = mysql_fetch_row ($result); $imgdat = base64_decode ($row[0]); header ("Content-Type:".$mime); echo $imgdat; mysql_close (); ?> ここで2つの質問があります。まずMySQLの管理方法です。 現状、呼び出すカラム名ごとでしか【(1)】のmysql_query文から画像ファイルを呼び出せない状況です。 自分で考えて、一度lineupテーブルの「ginkouhurikomi_images」と「creditcard_images」を1つにまとめて 「shiharai_images」を作成し、試してみましたが、力不足で上手く呼び出すことはできませんでした。 もう1つはview.phpの作成方法です。 こちらも同じく、呼び出すカラム名ごとに上記view.phpやview01.phpを作成している状況ですが、 上手に1つのファイルにまとめて、使い回しの効くファイルを制作することはできないでしょうか? 改善方法や、このような場合のオススメな方法がありましたら教えていただきたく思います。
- ベストアンサー
- PHP
- PHP、MySQLでテキストを処理する
英語やドイツ語など、スペースで区切られた言葉で作られた任意の文書を解析 したいのです。解析内容は、単語ごとに分解し、その単語が出現した回数をカウントし DB(MySQLなど)に格納します。PHPとMySQLで何とか実現したいのですが、どのような 方法で、どんな関数を使うかなど教えていただけないでしょうか。 入力されるデータはTEXT形式(WORDもあり)で、WebのフォームからCut&Pasteや 直接打ち込み などの方法で入れます。格納形式は半角の小文字です。 DBに格納されたデータは別のDBと連携させる予定です。 よろしくお願いします。
- ベストアンサー
- PHP
- MYSQLで、ファイルを格納する方法を教えてください。
動画ファイルの中身のバイナリデータをまるごとMYSQLのフィールドに格納したいのですが、方法が分かりません。 現在分かっていることは、データ形式をBLOB型として格納することくらいです。 SQL文から、またはC APIを使って実現する方法を教えてください。よろしくお願い致します。
- ベストアンサー
- MySQL
- PHPからMySQLに接続することができません。
PHPからMySQLに接続することができません。 解決方法をご存じの方は教えていただけないでしょうか。 PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) 環境 OS:CentOS 5.3 DB:Mysql 5.0.67(ソースからインストール) Web:Apache PHPのソースの一部を以下に記します。 $db_host = 'localhost';//DB_NAME; $db_user = 'user';//DB_USER; $db_pass = 'pass';//DB_PASS; $db = mysql_connect($db_host,$db_user,$db_pass); 以下の方法も試したのですが、エラーメッセージは変わりませんでした。 $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd") 端末のコマンドからMySQLへの接続は成功します。 ホスト名、ユーザー名、パスワードも上記と同一のものです。 $ /usr/local/mysql/bin/mysql -h localhost -u user -p Enter password:pass 以上です。宜しくお願いします。
- 締切済み
- PHP
- MySQLのBLOB型
MySQLを使ってデータベースを構築しています。 マニュアル等にBLOB型は大きいサイズ(正確にはわかりません)が格納できるはずですが、どうしても255バイトで切れてしまいます。 LONGBLOB型、TEXT型などにしても同様の結果です。 MySQLのバージョンは4.0.0-alpha、OSはWinサーバはApacheです。 解決方法がありましたら教えてください。
- ベストアンサー
- MySQL
- mysqlで長さ無制限の文字列を格納することはできますか?
mysqlを用いて掲示板を作りたいです。その際に、簡素化のため、掲示板の全てのデータをmysqlに格納したいと思っています。 また、掲示板における本文の部分は、文字列の長さを無制限にするのが妥当だと思います。 しかし、mysqlのマニュアル(http://dev.mysql.com/doc/mysql/ja/BLOB.html)によると、一番大きい型であるLONGBLOB型の記憶容量は 2^32バイトとなっており、それを超える文字列は切り捨てられるとなっています。 そこで、ご教授いただきたいです。 長さ無制限の文字列をmysqlに格納する方法はありますか?そしてその場合はどうすればよいですか? それとも、長さ無制限の文字列をmysqlに格納する方法ははなく、その場合は別ファイルを用意し、そちらに書き込むなどをする必要がありますか? どうぞよろしくお願いします。
- ベストアンサー
- MySQL
- 画像をDBに保存し、表示させるのは・・・?
はじめまして。 今、(1)ファイル参照から画像ファイルを選択してDB(MySQL:phpMyAdmin2.10.1)にある フィールド(gazou)へBLOBのバイナリで保存し、 (2)違うぺージでDBに保存してある画像を、検索して表示させたいのですが、 以下のようになってしまい、表示できません。 http://shokuhidiet.web9.jp/a/3.bmp ソースを載せておきます。どうかよろしくお願いいたします。 http://shokuhidiet.web9.jp/a/sos.txt
- ベストアンサー
- PHP
- PHPでの大量な画像を用いる場合のシステム設計
PHPは以前より、簡単なシステム (文字中心の掲示板、少量の画像を用いたシステム、など) は趣味程度で作成はしていたのですが 今後、多くの画像を用いたシステムを作成したいと考えています。 作成した、雛形システムを利用して 新たなテーマのコンテンツ作成のきっかけになればと思っています。 ■質問の動機 さて本題ですが、質問はタイトルの通りでして、 やはりシステムのテーマに色濃くなりますと、 どうしても大量の画像を使用した、アップロード⇔表示などが 頻繁なページの作成を想定しなければならないと考えています。 既にWEBでも、PHP等を用いそのようなサイトを個人運営している型も少なくなく そのような方がどのようなファイル管理をしているのか 参考に出来ればと考えております。 ■質問 システム的には、あるキーワード、ファイル名などで検索すると 一覧にそれに対応する画像が、表示されるようにしたい。 その際にアップロード処理、画像管理として一般的な方法を知りたいです。 例1 MYSQLなどのDBに、ファイルパスを登録、 実際の画像ファイルのリソース自体は、指定の格納フォルダを作成し順次格納していく 例2 もしくはDBにSQLでBLOB型で画像ごと一緒に登録する 等が思いつくのですが 例1の場合の方が、ファイル管理が楽そうだなと思っています。 しかしながら質問の動機通り、画像アップロードを基本としたシステムとする場合、 将来的に、DBに一緒に格納した方が処理が早いものなのかな?などと。も考えています。 何分そういうシステムを作成した事がないため、 もしくは自分で作成しながら試していくと言うのも手なのですが 大量画像となると試験的なことも難しいため、 こういう方法が既知としてベターだというものがあれば、 さっくりでいいので、参考程度にお聞かせ願えますでしょうか。 たいした質問でもありませんが、よろしくお願いいたします。
- ベストアンサー
- PHP
- EPSON社製品LX-10050MFを使用中に、エラーコード034202が表示され機器が停止しました。マニュアルに詳細がなく、対応方法が不明です。
- LX-10050MFのエラーコード034202に関する情報を探しています。機器がストップし、マニュアルにも記載がないため、解決策を求めています。
- EPSONの機器LX-10050MFで発生するエラーコード034202の修理方法がわからず困っています。どなたか対応方法をご存知の方はいませんか。
お礼
分かりやすいご説明で、大変理解が深まりました。 この度は、誠にありがとうございました。