• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:webroot以外の画像の表示)

webroot以外の画像の表示

このQ&Aのポイント
  • CakePHPでwebroot以外に配置した画像を表示する方法を教えてください。
  • 会員登録画面で指定した画像ファイルを確認画面で表示したいですが、webroot以外に保存した画像を読み込む方法がわかりません。
  • IE上で画像が表示されず、画像のパスは合っているようです。どのようにすればwebroot以外の画像を表示できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • foreach
  • ベストアンサー率51% (43/84)
回答No.5

> ここではimgタグを使わずに、imagejpegメソッドで表示しています。 深く考えすぎ。思考が迷走してます。 普通に考えてみましょう。 普通にwebroot/imgにイメージを置いてブラウザでアクセスしたら画像が表示されますよね? このとき貴方は何かHTMLを書きましたか?ブラウザで直接画像にアクセスしたのだから当然HTMLは書いてませんよね? これふまえて、 http://phpspot.net/php/man/php/function.imagejpeg.html に書いてあるコードをcakeに移植してみて下さい。 んで、そのコントローラ/アクションにブラウザで直接アクセスしたら画像が表示されませんか? ここまで来たらCTPでIMGを表示する方法を思い出して下さい。 <img src="イメージへのPATH" /> にコントローラ/アクションのURLを当てはめれば良いんですよ。ブラウザでアクセスして画像が表示できるのだから何も問題ない。 4さんの言う通り、まずはコントローラ/アクションの方式できちんと画像が表示するところから解決すべきかな。

rufas
質問者

お礼

そのままコピペさせていただきましたが、 こんな感じでやったのですが、 画像が表示されませんでした。 IEですと×表示になっています。 view側で contoroller/actionと書いていますが、 action側にいってないようです。 -----view側---- <img src ="<?php echo $html->url('users/imageDisp'); ?>"> ----controller側---- function imageDisp(){ $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); header('Content-Type: image/jpeg'); imagejpeg($im); imagedestroy($im); }

rufas
質問者

補足

できました!! contorollerの指定なしで、actionだけ指定しました。 <img src ="<?php echo $html->url('imageDisp'); ?>"> が、しかし自分の書いたものは表示されませんでした。 根本的なミス、画像のパスが違うとかなのでしょうね… function imageDisp(){   header( "Content-type: image/jpeg" );   readfile('/system/photo/image/test.jpg'); }

その他の回答 (5)

  • foreach
  • ベストアンサー率51% (43/84)
回答No.6

> function imageDisp(){ 一番のアヤシイのはメソッド名。 これusersコントローラの中のメソッドなんですよね? /app/views/users/ 以下のファイルを全て列挙して下さい。そしたら答えが分かります。

rufas
質問者

お礼

お付き合いありがとうございました。 これを <img src ="<?php echo $html->url('users/imageDisp'); ?>"> このようにしたら、できました。 <img src ="<?php echo $html->url('imageDisp'); ?>"> どうしてもっと早く気がつかなかったのか… 大変勉強になりました。

回答No.4

できないはずがありません。 実際、私自身Cakeでシステム構築時にプログラム経由で画像出力してますので。 まず、画像出力用のプログラムを直接叩いた場合にどうなるか確認した方がいいと思います。 その上で画像が出力されないなら、画像のパスが合っているのかとか正しいヘッダーが出力されているのかとか、一つずつ確認してみてください。 ちなみに画像出力時に「Content-type: image/jpeg」だけでは不十分です。

  • foreach
  • ベストアンサー率51% (43/84)
回答No.3

下のお二方の回答をあわせると、それが答えになります。 1,HTML側におけるIMGの表示は<IMG>タグ 落ち着いてよく考えましょう。 HTMLなのだから普通にIMGタグを使います。echo $image;などしても出ません。 <img src="イメージへのPATH" /> 2,イメージへのPATHに$this->Html->urlでURLを指定 そのURLで起動するコントローラのアクションにヘッダを付けてイメージを出力するコードを書いたら良いんです。 それこそ2さんのおっしゃる通り「php 画像 出力」で調べたらいくらでも出てきます。

rufas
質問者

お礼

ありがとうございます。 もちろん調べていますし、「php 画像 出力」でも検索してみました。 http://phpspot.net/php/man/php/function.imagejpeg.html ここではimgタグを使わずに、imagejpegメソッドで表示しています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1056373730 ここでもimgタグを使わずに、freadで表示しています。 webroot以外の画像なのでimgタグは使えないと思い、他の方法を探していました。 imagejpegやfreadでは出来ないということでしょうか。

回答No.2

そのままファイル内容を出力するだけでは画像を表示することはできません。 画像ファイル出力前に、画像ファイル出力用のヘッダーを出力する必要があります。 詳しくは「php 画像 出力」などのキーワードで検索してみてください。 しっかりつくるなら「ETag」についても調べてみるといいと思います。

rufas
質問者

お礼

ありがとうございます。 header('Content-type: image/jpeg'); ↑これですよね? この画像の出力の前にechoでテキストを出力しているため、 実行ファイルパス名で壊れていますと表示されてしまうのです。 1枚のページに画像のみだといけるのかもしれませんが… テーブルのあるセルの一部に画像を表示させようとしていますので、 headerが使えないようです。

回答No.1

> $html->image('/system/image/', . $this->data['User']['image']) これはimgタグを出力するだけなので、webroot以外に置いているのにその画像のパスを直接指定しても見えるわけがありません。 webroot以外に配置した画像を出力するには、画像出力用のプログラムを用意してそのプログラムを指定するようにしましょう。

rufas
質問者

お礼

ありがとうございます。 imageタグで表示できないことがわかり、調べて書いてみたのですが、 画像をテキスト表示したような表示が出力され、 画像が表示できませんでした。 $file = '/photo/test.jpg'; $fp = fopen($file, "rb"); pr(filesize($file)); $image = ''; while(!feof($fp)){ $image .= fread($fp, 8192); } echo $image; fclose($fp);

関連するQ&A