アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpを勉強始めたばかりで、データベースを使う必要がでてきたため、初心者サイトを
読んでいるのですが、一点質問があります。
行いたい事は、データベースに保存した画像パスをphpで出力するだけなのですが、パスが
文字列として扱われてしまっています。画像を出力するにはどうすれば良いでしょうか?
例えば以下のようなphpプログラムで、nameには画像パスである 「abc.jpg」という文字が
入っていたとすると以下ではそのままabc.jpgという文字列が出力されてしまします・・・。
<?php

$pdo = new PDO("mysql:dbname=aaa", "root");
$pdo->query("set names utf8;");
$st = $pdo->query("SELECT * FROM bbb");
while ($row = $st->fetch()) {
$name = htmlspecialchars($row['name']);
echo '<img src="$name">';
}
?>

A 回答 (3件)

No.1さんもおっしゃっているように


> 「abc.jpg」が表示されるとは思えませんが

仮に

echo "<img src=¥"$name¥">";

だとして、出力結果が

<img src="abc.jpg">

となったとしたら、これはこれで正しいと思いますよ。

abc.jpgがその場所にあれば、正しく表示されると思います。

画像そのものを出力したい、つまり
(たとえば)
/abc.jpg

がリクエストされたとき、PHPを実行して画像(バイナリ)を返したい、ということならば、

1.まずそのURLがリクエストされたときPHPが実行されるようにウェブサーバの設定をする
2.(画像そのものがDBに格納されているとして)PHPで先のPDOなどを使って画像を取得する
3.header関数でContent-Typeを指定して(header('Content-type: image/jpeg');)
4.2の画像を出力する

という流れになると思います。


画像をDBに格納しておらず、どこかのディレクトリに保存しているなら、

1.そのディレクトリをウェブサーバ経由で外部ネットワークから参照できるようにウェブサーバを設定する
  またはウェブサーバ経由で外部ネットワークから参照できるディレクトリにその画像を保存する
2.そのディレクトリに対応するURLパスを先のDBに保存する
3.先の$nameが2のURLになっていればOK

と思います。ウェブ上から見えないどこかのディレクトリに保存してPHP経由で返してもよいと思います。
    • good
    • 0

htmlspecialcharsが要らないのではないでしょうか?

    • good
    • 0

>そのままabc.jpgという文字列が出力



echo '<img src="$name">';
という記述を見る限り、シングルクォーテーションで囲まれている
文字列を出力しているので$nameは展開されないので
「abc.jpg」が表示されるとは思えませんが?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す