
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;
?>
No.6ベストアンサー
- 回答日時:
2再補足です。
私のソースをそのまま実行して画像が表示され、sqlから取得したパスで画像が表示されない場合はパスの問題です。
最初に書くべきでしたがブラウザのアドレスに$row['image']の中身を打ち込んで画像が表示できるか試してください(404ならパス指定、何も表示されない場合画像が壊れていると思います)
後は画像出力ファイルを書き換えてテストとなりますが
以下は実行・画像出力phpと画像フォルダ(images)が同じ場所にある前提です。(相対パスなので)
1・result.phpの$img_pathを$img_path = 'images/xxx.jpg';(相対パス&直接指定)で実行
2・Mysqlの画像パスは$row['image']にあるとして$img_path = $row['image'];となっている部分を
$img_path = mb_strstr($row['image'], 'images', FALSE);に変更し実行(相対パスに変更)
ご回答ありがとうございます。
アドバイス頂いたとおり、順を追って書きなおしてみることでうまく表示されるようになりました。
丁寧にアドバイスしていただきありがとうございます。
最後に一点、画像出力ファイルについてなのですが、複数の画像を扱う場合はそれぞれの画像ごとに出力ファイルを作るのが望ましいのでしょうか?それとも、ファイルはどうにか一つにまとめるのが普通なのでしょうか?
No.5
- 回答日時:
no2です、自分でやる場合のサンプルソースを載せます。
ブラウザで表示するphpと画像出力用のphpの2ファイル使います。念のため言いますが、get_iamge.php1行目は必ず<?phpで開始し、このままコピーしてください。先頭行をいじると画像が表示されなくなります。
実行し動作を確認したら、コードを読み少しずつ改良を加えていくのがベストです。
実行するphp(後でidを付加する)
<?php print '<img src="get_image.php">'; ?>
get_image.php
<?php
//mysqlやidの処理を加える
$img_path = 'http://gazo.okwave.jp/okwave/images/contents/av_ …
//サンプルがhttpなのでfopen
if(!@fopen($img_path, 'r')) $img_path = 'error.gif';
//サーバー内に画像がある場合
//if(!is_file($img_path)) $img_path = 'error.gif';
header('Content-Type: image/gif');//面倒なので決め打ち
readfile($img_path);//file_get_contentsは一旦変数に保存する
?>
この回答への補足
ご回答ありがとうございます。
わざわざコードまで書いていただきお手数おかけして申し訳ありません。
やはり、画像がリンク切れのような表示をしてしまいます。
こうなってくると、プログラム自体の問題というより、画像そのものもしくは画像のパスの問題になってくるのでしょうか。
No.4
- 回答日時:
こんにちは。
うまくいかないとはどのようにいかないのでしょうか?
(ラーが出てるとか出ていないとか)
質問者様の思っている「うまく」がわからないので補足願います。
タグのsrcに指定しないで直接呼び出したら何が表示されていますか?
xxx.xxx/get_image.php?id=xx
おそらくget_image.phpからimages/aaa.jpgが見えないんだと思います。
ディレクトリ構成なんかもあると回答しやすいです。
この回答への補足
説明不足で申し訳ありません。
うまくいかないというのは、特段プログラムのエラーが表示されるわけでもなく、画像が表示される部分がリンク切れのようなマークが出てしまいます。
直接呼び出すというのは、本来画像が表示されてほしい場所に直接そのまま
<?php echo $row['thumbnail']; ?>
とすると、、保存しているパス(文字列)がそのまま表示されます。
現在、ローカル環境で作っていますので、ディレクトリ構成としては以下のように配置しています。
localhost/testprogram/index.php
このindex.phpと同階層にresult.phpやimagesフォルダを置き、
imagesフォルダの中に画像を置いています。
したがって、画像の場所としては、
localhost/testprogram/images/画像.jpg
といった形になります。
No.3
- 回答日時:
こんにちは。
まずはDBから取得したパスが思い通りのものであるか出力された内容を見てください。
No2さんの指摘で気づきましたが、
$img_path = '$row['image']'とか$img_path = "$row['image']";
はエラーになりませんか?
$img_path = $row['thumbnail'];
になると思います。
またパスについては設計によりけりです。
表示するスクリプトから見た相対パスなのか、ホームディレクトリからのパスなのか、URLがすべて入っているのか。
どんな内容を保存していますか?
/images/aaa.jpg
images/aaa.jpg
www.hoge.hoge/images/aaa.jpg
aaa.jpg
等々
この回答への補足
ご回答ありがとうございます。
そうですね、
$img_path = $row['thumbnail'];
が正しいです。
保存している内容は
images/aaaa.jpg
という形を保存しています。
まずはget_image.phpにアクセスして確認しながらなのですが、うまく表示されません。
全体の設計としては、
質問文に記載したコードがget_image.phpの内容で、実際にブラウザに表示するときは、
<img src="get_image.php?~~~~
という形を取ろうと考えています。
No.2
- 回答日時:
$img_path = '$row['image']'は可変変数?普段使わないので、こういう書き方もアリなのか判断できない自分が居ます。
直接イメージファイルを出力するのなら、file_get_contentsではなくreaderで済みます。
header("Content-type: image/jpg");
readfile("ファイルパス");
この回答への補足
質問文の中で一部記載ミスがありました。No1の回答者様の補足の欄に記載ミス・補足内容を書かせて頂きました。
これによりわかりづらい質問になってしまったことをまずお詫び致します。
今回は検索システムを想定していましたので、パスを直接書き込むというより、DBに保存したものをひっぱってくる形をとろうと考えています。
thumbnailというカラムにパスを保存しているので、ファイルパスの部分には$row['thumbnail']を入れてみているのですが、どうにも表示されません。されません。
一方で、表示したい部分に何もかませずに直接パスを書き込むときちんと表示されます。
No.1
- 回答日時:
こんにちは。
画像の保存ディレクトリが外部から見える場所にある場合→
<img src="<?php echo $imgpath ?>">
($imgpathはデータベースより取得したパス)
外部から見える(URLでアクセスできる)場所であれば取得したパスをそのままsrcに設定すればブラウザに表示されます。
画像の保存ディレクトリが外部から見えない場所の場合→
この場合は提示されたスクリプトを画像タグで呼べば良いです。
<img src="image.php?id=5">
DBに入っているパスが外から見える場所かどうかでやりかたが変わります。
この回答への補足
ご回答ありがとうございます。
まず、質問文に一部記載ミスがありましたことをお詫び致します。
【誤記】
$img_path = "$row['image']";
正しくは、 $img_path = "$row['thumbnail']"; です。
カラムがthumbnailなので、$row['thumbnail']でなければなりませんでした。
失礼しました。
ご説明していただくことで勝手は理解することができました。
今回の件ではURLでアクセス出来る場所でしたので、例えばパスをそのままimg src="パス名"という形で入れてみるときちんと表示されました。
一方で、パスを直接書き込むのではなく、DBに格納したものをひっぱってくる形だとうまく表示されません。
これは絶対パスか相対パスかによって違ったりするのでしょうか?
DBには絶対パスを格納しています。
重ねてご質問させていただく形になりますが、是非ご教示ください。
※今回検索システムの中での画像の仕組みの部分で、$row = mysql_fetch_array($result);としているため、DBから引っ張ってくるときに$row['']となっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JAVA】画像のサイズを大きく...
-
phpで画像を縮小して表示するこ...
-
PHPでグラフを書く
-
SQLiteに画像を格納したい
-
VBSの「MsgBox」について
-
画像リストを作りたい
-
GD(php)での image関数 イメ...
-
PHP+PostgreSQLを使ってPDFファ...
-
iphoneで虫眼鏡の作り方
-
VBAでJPGサイズ変更
-
PythonのTkinter詳しい方へ。画...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
「クラス関数」「メンバ関数」...
-
BASP21のFTPで日本語ファイル名...
-
glob関数で日本語文字が取得で...
-
PHPで、エラーがない場合のみ画...
-
FTPClientで転送結果(OKかFAIL)
-
PHPの設定で、 エラーが発生し...
-
VB6にてメールを送信する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
iphoneで虫眼鏡の作り方
-
Illustratorで文字と画像を流し...
-
pictureboxに表示した画像のフ...
-
透過PNGが透過されない!!
-
GDI+を使ったビット数とDPIの扱い
-
VBAでJPGサイズ変更
-
PHPで吐き出した画像にリンクを...
-
ListViewコントロールでサムネ...
-
拡張子php画像をjpg画像等に変...
-
ビットマップ画像を読み込むプ...
-
C#とJavaで、MP3タグの画像を表...
-
SQLiteに画像を格納したい
-
手作業で埋め込んだ、UserForm1...
-
【PHP】サーバー上で TIFFをJPE...
-
BLOBデーターの画像の表示方法...
-
jar化すると画像が消える
-
「imagejpeg」(GD)で作成した...
-
PythonのTkinter詳しい方へ。画...
-
php,mysqlにて画像パス保存/表...
おすすめ情報