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.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['']となっています。
No.2
- 回答日時:
$img_path = '$row['image']'は可変変数?普段使わないので、こういう書き方もアリなのか判断できない自分が居ます。
直接イメージファイルを出力するのなら、file_get_contentsではなくreaderで済みます。
header("Content-type: image/jpg");
readfile("ファイルパス");
この回答への補足
質問文の中で一部記載ミスがありました。No1の回答者様の補足の欄に記載ミス・補足内容を書かせて頂きました。
これによりわかりづらい質問になってしまったことをまずお詫び致します。
今回は検索システムを想定していましたので、パスを直接書き込むというより、DBに保存したものをひっぱってくる形をとろうと考えています。
thumbnailというカラムにパスを保存しているので、ファイルパスの部分には$row['thumbnail']を入れてみているのですが、どうにも表示されません。されません。
一方で、表示したい部分に何もかませずに直接パスを書き込むときちんと表示されます。
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.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.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.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);に変更し実行(相対パスに変更)
ご回答ありがとうございます。
アドバイス頂いたとおり、順を追って書きなおしてみることでうまく表示されるようになりました。
丁寧にアドバイスしていただきありがとうございます。
最後に一点、画像出力ファイルについてなのですが、複数の画像を扱う場合はそれぞれの画像ごとに出力ファイルを作るのが望ましいのでしょうか?それとも、ファイルはどうにか一つにまとめるのが普通なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP echo バックスラッシュの使い方 img要素 2 2023/01/08 22:46
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
php mysql で WHERE句内に変数を入れる方法を教えてください。
PHP
-
phpでmysqlから画像パスを出力する
MySQL
-
チェックボックスによる検索(複数チェックの場合)
PHP
-
-
4
ある条件に当てはまったときに別ページにジャンプする ?
PHP
-
5
ファイル名を変更してアップロードする方法
PHP
-
6
bindValueエラー
PHP
-
7
フォームで同じ複数のnameで違うvalueの送信
Java
-
8
functionから別のfunctionを実行したい
JavaScript
-
9
データベースの1要素に複数データを格納したい
その他(データベース)
-
10
htmlの文字が縦書きになる
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
透過PNGが透過されない!!
-
ビットマップ画像を読み込むプ...
-
php,mysqlにて画像パス保存/表...
-
MATLABのGUIDEでフォルダ内の画...
-
画像が存在しない時の 「×」 表...
-
pictureboxに表示した画像のフ...
-
手作業で埋め込んだ、UserForm1...
-
iアプリ:スクラッチパッド
-
GDI+を使ったビット数とDPIの扱い
-
画像ファイル pngのメリットを...
-
VBAでJPGサイズ変更
-
アップロード画像数でCSSを分け...
-
フォントの色を変えるには?
-
リンク先を隠す方法はないでし...
-
PHPのif文でその処理を途中で抜...
-
コマンドプロンプトで添付ファ...
-
ワードプレスサイト PHP8.0.25...
-
a.phpにあるアクセスカウンター...
-
php 指定文字列以降の削除
-
.htaccessにphp_valueが使用できな
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
アップロード画像数でCSSを分け...
-
imageフォルダに、画像をリサイ...
-
VBAでJPGサイズ変更
-
Illustratorで文字と画像を流し...
-
VBAのコードを教えてください
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
GDI+を使ったビット数とDPIの扱い
-
SQLiteに画像を格納したい
-
ListViewコントロールでサムネ...
-
★PHP?★画像を縦横比を変えずに...
-
phpで画像がどうしても文字化け...
-
PHPで吐き出した画像にリンクを...
-
OpenGLで描いて画像ファイル出力
-
phpMyAdminに画像を保存できない
-
ビットマップ画像を読み込むプ...
-
手作業で埋め込んだ、UserForm1...
おすすめ情報