- ベストアンサー
phpの画像表示
sqliteで質問があります。 sqliteのdbファイルにimageというカラムを作りパスを入力してサーバーにアップしました。例:hoge/hoge.jpg そこで質問です。 html(php)側には何と書けば画像は表示されますか? html側は $row という変数に格納しwhileでカラム分だけループさせています。 画像は &row[6] に当たります。 やってみたこと→'<img src="$row[6]">' こうしましたが、表示されませんでした。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>やってみたこと→'<img src="$row[6]">' こうしましたが、表示されませんでした。 基本的にはそれで間違いありません。 間違えているのは「相対パス」の考え方だと思います。 使用しているhttpsが不明ですが、何を使用したとしても考え方は同じはずなので基本的なことを言いますね。 まず、Document rootとPHP等のCGIの実行フォルダが同じか確認してください。 Document root配下の特定のフォルダをPHPなどの実行スクリプトにしていればそれはそれでそういうものと認識しておきましょう。 その上で、画像ファイルの置き場所を考える。 データベースのColumnにパスを含む画像ファイルの文字列を入れているということですが、そのパスは相対バスですか?絶対パスですか? 絶対パスの場合はローカルパスではなくインターネットで使えるパス名にしなくとはいけませんが…相対パスで記述する場合はネットでもローカル度も違いを考慮する必要はありません。 ですが「相対パス」というのは「カレントフォルダを起点」とした場合のフォルダの見え方を記述することになります。 PHPのようなスクリプトを使用した場合だとPHPの保存されているフォルダが起点となったはずです。 ※ApachとPerlでプログラミングしていたときはそうだったはずで、Apachの.configの環境設定で指定があったはず。 つまり、相対バスで指定された場所にファイルがないから表示されないんだと思います。 Apachならアクセスログやエラーログを見れば画像が表示されない原因を突き止められるはずですが、ほかのhttpdはよくわかりません。 ドキュメントルートと実行プログラムの場所は変えているのが普通です。それらが一緒だとセキュリティ的に非常にまずい状態になってしまいますからね。パーミッションという考え方も絡んでくるので簡単に説明することは難しいです。Linuxの構築やプログラミングに関する書籍を買って勉強してください。 Windowsだとそういう考え方って知らなくてもなんとかなるんですけどね。ですがセキュリティのことを考慮するとなるとどうしてもパーミッションというものは覚えておいたほうがいいはずです。
その他の回答 (2)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
あ、すいません。 ファイル名のみのはなしでしたか。。 私の方PHPで画像を送り出すのかと思ってました。 読み違いです。すいません。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
根本的なミスが。 その場合、 HTML部のIMG SRC=ファイル名 そして、JPEGはそのファイル名でアクセスすることで 画像を送り出すPHPである必要があります。 なので、画像を送り出すには、 「ファイル名」でアクセスできるPHPが必要で、 HTMLが画像を送り出すわけじゃないです。 なので、 a.php -> img src=b.php とでもして、 b.php -> こいつが、画像をバイナリで送り出す。 という流れになります。 その時、送り出されるものが「画像である」 ってことを教えるMIMEを送り出してください。 この後あなたは、 第一段階で、404を取得していく流れになり、 その後第2段階で、壊れた画像(通常X表示)を 出せるようになり、その後の段階で画像が表示できるという 流れを見ると思います。 画像ごとに、MIMEも違うため、ついでに自動化しておけばいいでしょう。 関連するサンプルを貼っておきます。 https://www.php.net/manual/ja/function.image-type-to-mime-type.php