- ベストアンサー
php,mysqlにて画像パス保存/表示についての質問
- php,mysqlにおける画像パス保存/表示についての質問です。以前は画像データをDBに保存していましたが、画像パスを使う方針に変更しました。具体的な画像表示の方法についてアドバイスをいただきたいです。
- 以前画像データをDBに保存していましたが、画像パスを使う方針に変更しました。具体的な画像表示の方法についてアドバイスをいただきたいです。
- php,mysqlにおいて画像パスを保存し、表示する方法についてのご質問です。以前は画像データをDBに保存していましたが、画像パスを使用するように変更しました。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
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);に変更し実行(相対パスに変更)
その他の回答 (6)
- axuaxua
- ベストアンサー率36% (82/223)
こういうphpは使わないので想像で答えますが 画像1枚につきphp1個という意味なら、ほとんど処理が同じようなら一つしか使いません。 特殊な処理を追加するときはその処理用のファイルを作成してincludeします。 GDなどを使用して複数画像を合成やら編集するのなら…気分ですね。凄く面倒な予感がしますので やはり機能分割したファイルをincludeになると思います
お礼
ご回答ありがとうございます、参考になりました。 今回は丁寧なアドバイスをしていただき、ありがとうございました。
- axuaxua
- ベストアンサー率36% (82/223)
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_nophoto_80.gif'; //サンプルが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は一旦変数に保存する ?>
補足
ご回答ありがとうございます。 わざわざコードまで書いていただきお手数おかけして申し訳ありません。 やはり、画像がリンク切れのような表示をしてしまいます。 こうなってくると、プログラム自体の問題というより、画像そのものもしくは画像のパスの問題になってくるのでしょうか。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 うまくいかないとはどのようにいかないのでしょうか? (ラーが出てるとか出ていないとか) 質問者様の思っている「うまく」がわからないので補足願います。 タグの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 といった形になります。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 まずは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?~~~~ という形を取ろうと考えています。
- axuaxua
- ベストアンサー率36% (82/223)
$img_path = '$row['image']'は可変変数?普段使わないので、こういう書き方もアリなのか判断できない自分が居ます。 直接イメージファイルを出力するのなら、file_get_contentsではなくreaderで済みます。 header("Content-type: image/jpg"); readfile("ファイルパス");
補足
質問文の中で一部記載ミスがありました。No1の回答者様の補足の欄に記載ミス・補足内容を書かせて頂きました。 これによりわかりづらい質問になってしまったことをまずお詫び致します。 今回は検索システムを想定していましたので、パスを直接書き込むというより、DBに保存したものをひっぱってくる形をとろうと考えています。 thumbnailというカラムにパスを保存しているので、ファイルパスの部分には$row['thumbnail']を入れてみているのですが、どうにも表示されません。されません。 一方で、表示したい部分に何もかませずに直接パスを書き込むときちんと表示されます。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 画像の保存ディレクトリが外部から見える場所にある場合→ <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['']となっています。
お礼
ご回答ありがとうございます。 アドバイス頂いたとおり、順を追って書きなおしてみることでうまく表示されるようになりました。 丁寧にアドバイスしていただきありがとうございます。 最後に一点、画像出力ファイルについてなのですが、複数の画像を扱う場合はそれぞれの画像ごとに出力ファイルを作るのが望ましいのでしょうか?それとも、ファイルはどうにか一つにまとめるのが普通なのでしょうか?