- ベストアンサー
webroot以外の画像の表示
- CakePHPでwebroot以外に配置した画像を表示する方法を教えてください。
- 会員登録画面で指定した画像ファイルを確認画面で表示したいですが、webroot以外に保存した画像を読み込む方法がわかりません。
- IE上で画像が表示されず、画像のパスは合っているようです。どのようにすればwebroot以外の画像を表示できるのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> ここではimgタグを使わずに、imagejpegメソッドで表示しています。 深く考えすぎ。思考が迷走してます。 普通に考えてみましょう。 普通にwebroot/imgにイメージを置いてブラウザでアクセスしたら画像が表示されますよね? このとき貴方は何かHTMLを書きましたか?ブラウザで直接画像にアクセスしたのだから当然HTMLは書いてませんよね? これふまえて、 http://phpspot.net/php/man/php/function.imagejpeg.html に書いてあるコードをcakeに移植してみて下さい。 んで、そのコントローラ/アクションにブラウザで直接アクセスしたら画像が表示されませんか? ここまで来たらCTPでIMGを表示する方法を思い出して下さい。 <img src="イメージへのPATH" /> にコントローラ/アクションのURLを当てはめれば良いんですよ。ブラウザでアクセスして画像が表示できるのだから何も問題ない。 4さんの言う通り、まずはコントローラ/アクションの方式できちんと画像が表示するところから解決すべきかな。
その他の回答 (5)
- foreach
- ベストアンサー率51% (43/84)
> function imageDisp(){ 一番のアヤシイのはメソッド名。 これusersコントローラの中のメソッドなんですよね? /app/views/users/ 以下のファイルを全て列挙して下さい。そしたら答えが分かります。
お礼
お付き合いありがとうございました。 これを <img src ="<?php echo $html->url('users/imageDisp'); ?>"> このようにしたら、できました。 <img src ="<?php echo $html->url('imageDisp'); ?>"> どうしてもっと早く気がつかなかったのか… 大変勉強になりました。
- mookun2007
- ベストアンサー率59% (28/47)
できないはずがありません。 実際、私自身Cakeでシステム構築時にプログラム経由で画像出力してますので。 まず、画像出力用のプログラムを直接叩いた場合にどうなるか確認した方がいいと思います。 その上で画像が出力されないなら、画像のパスが合っているのかとか正しいヘッダーが出力されているのかとか、一つずつ確認してみてください。 ちなみに画像出力時に「Content-type: image/jpeg」だけでは不十分です。
- foreach
- ベストアンサー率51% (43/84)
下のお二方の回答をあわせると、それが答えになります。 1,HTML側におけるIMGの表示は<IMG>タグ 落ち着いてよく考えましょう。 HTMLなのだから普通にIMGタグを使います。echo $image;などしても出ません。 <img src="イメージへのPATH" /> 2,イメージへのPATHに$this->Html->urlでURLを指定 そのURLで起動するコントローラのアクションにヘッダを付けてイメージを出力するコードを書いたら良いんです。 それこそ2さんのおっしゃる通り「php 画像 出力」で調べたらいくらでも出てきます。
お礼
ありがとうございます。 もちろん調べていますし、「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では出来ないということでしょうか。
- mookun2007
- ベストアンサー率59% (28/47)
そのままファイル内容を出力するだけでは画像を表示することはできません。 画像ファイル出力前に、画像ファイル出力用のヘッダーを出力する必要があります。 詳しくは「php 画像 出力」などのキーワードで検索してみてください。 しっかりつくるなら「ETag」についても調べてみるといいと思います。
お礼
ありがとうございます。 header('Content-type: image/jpeg'); ↑これですよね? この画像の出力の前にechoでテキストを出力しているため、 実行ファイルパス名で壊れていますと表示されてしまうのです。 1枚のページに画像のみだといけるのかもしれませんが… テーブルのあるセルの一部に画像を表示させようとしていますので、 headerが使えないようです。
- mookun2007
- ベストアンサー率59% (28/47)
> $html->image('/system/image/', . $this->data['User']['image']) これはimgタグを出力するだけなので、webroot以外に置いているのにその画像のパスを直接指定しても見えるわけがありません。 webroot以外に配置した画像を出力するには、画像出力用のプログラムを用意してそのプログラムを指定するようにしましょう。
お礼
ありがとうございます。 imageタグで表示できないことがわかり、調べて書いてみたのですが、 画像をテキスト表示したような表示が出力され、 画像が表示できませんでした。 $file = '/photo/test.jpg'; $fp = fopen($file, "rb"); pr(filesize($file)); $image = ''; while(!feof($fp)){ $image .= fread($fp, 8192); } echo $image; fclose($fp);
お礼
そのままコピペさせていただきましたが、 こんな感じでやったのですが、 画像が表示されませんでした。 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); }
補足
できました!! contorollerの指定なしで、actionだけ指定しました。 <img src ="<?php echo $html->url('imageDisp'); ?>"> が、しかし自分の書いたものは表示されませんでした。 根本的なミス、画像のパスが違うとかなのでしょうね… function imageDisp(){ header( "Content-type: image/jpeg" ); readfile('/system/photo/image/test.jpg'); }