webroot以外の画像の表示

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

webroot以外の画像の表示

CakePHP始めたばかりです。 会員登録画面のようなものを作っています。 会員情報を入力し、確認ボタンを押すと確認画面に遷移します。 その確認画面で、入力画面で指定した画像ファイルを表示したいのですが、 webroot/imgではURL直打ちされると見えてしまうので、 webroot以外に保存しました。 アップロード画像の保存まではうまくいったのですが、 $html->image('/system/image/', . $this->data['User']['image']) としても画像が表示されません。 $this->data['User']['image']にはabc.jpgなどと入っています。 IE上で画像が×になっているところのプロパティをみると、 画像のパスは合っているようです。 試しにwebroot配下に置くバージョンを作ってみたら表示されました。 webroot以外に配置した画像を読み込むにはどうしたら良いのでしょうか。 CakeでなくてもPHPでいいので、教えてください。

  • rufas
  • お礼率75% (315/420)
  • PHP
  • 回答数6
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • cakephp1.2で画像が出力できない!

    お世話になります。cakephp1.2で解決できないことがあります。 それは画像の出力です。 app/webroot/img配下にtest.jpgがある場合、 どのように表記したらビューで出力できるでしょうか? <?php echo $html->image('test.jpg') ; ?> や絶対パス、cake.power.pngなどの出力テスト をいろいろ試しましたが、どうしても解決できません>< どうかみなさま宜しくお願い致します。 暫くプログラマの方と連携がとれないので、 こちらに質問させて頂きました。。。

    • ベストアンサー
    • PHP
  • CakePHPでのフォームデータの受け渡しについて

    CakePHPでフォームから送られてきたデータは$this->dataに格納されていますが、フォームから送られてきた$this->dataを「フォームの送信先」以外で使うにはどのようにしたら良いのでしょうか? $this->set('test', $this->data); $this->redirect(array( 'action' => 'confirm' )); などとして、confirmで$testをprしてみたのですが、この方法では送られないようです。 よくある、申込フォーム→確認画面、のようなものを作りたいのですが、バリデーションを行う都合もあり申込フォーム自身をフォーム送信先に指定しており、完全に内容が入力された状態になったら確認画面に移行する、というイメージなのですが、この「確認画面」にフォーム送信値の$this->dataを引き継ぐ方法がわかりません。 解決法をご存知の方、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 画像の投稿→表示についてです

    こんばんは。今PHP勉強中の者です。 今画像投稿画面を作成しています。 画像投稿の遷移は 1、フォームに様々なテキストなどで文言等も含めて ローカルの画像を入力、参照        ↓ 2、確認画面で入力項目、投稿画像の表示、確認        ↓ 3、2の項目でいいなら投稿(データベースへデータを格納)し、 投稿ありがとうございました。等の文言表示。 といった行程です。 1~2の遷移はいいのですが、2移行が上手くできていません。 画像を何処から読み出しして参照として表示させたらいいのか よくわかりません。 $_FILESで配列を作成できていても、 その配列にある[tmp_name]という箇所のパスっぽい所を見ても 一時フォルダに画像が入ってる感じがしません。 (一時保存場所はデフォルトのままなでno_valueです。) これの確認画面での表示は一時保存フォルダ以外に 何処か同じサーバ内にフォルダ作って移動させて、 表示させて後に消すといったことをしたらいいのでしょうか? それともそのままアップする側のローカルの画像を 表示させるようにしたらいいのでしょうか? また、画像はFTP接続して別のサーバに画像をアップする感じです。 画像の読み出し自体はhttp://hogehoge.com/hoge1/hoge2.jpg のような感じで読み出しますので、データベースにその パスも入れたいのですが、3の行程でインサート文のSQLを 発行する前に、他の文言等と一緒に このパスも拾わなければならない感じです。 FTP接続などは終了しているのですが、これも何処で 別サーバへアップしてURLを拾ってあと、 データベースへURLのインサート処理していいのかよくわかりません。 なんか乱雑な文章になりましたが、解決したいので、 ご教示いただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 背景画像が表示されません

    こんにちは。 お世話になります。 会社命令で、生まれて初めてホームページを作成しているものです。 入門テキスト通りにやっているのですが、どうしても下記にあげます事が上手く画面に反映されません。 1、背景画像を「image/sky82.jpg」で固定する。背景に壁紙の様に大きく単独で、この画像を使用したいのですが、 一切表示がなされない。 2、表示文字を白くしたいが、そもそも文字が表示されない。 また、文字が表示される個所は、画面中央に、縦長で表示したい。 以上です。 以下が、テキストを貼り付けて入力しましたデータ(?)になります。 私がいじったところは、「image/sky82.jpg」を、もと有ったデータと置き換えただけです。 テキストでは、文字が白く、背景に画像が右下に固定されています。 どうしたら、上手く表示されるのでしょうか? どなたか、お力をかしては頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • CSS
  • 画像の表示

    マイドキュメントの中のマイピクチャーを開いたところJPG等で保存している画像が一覧で表示されません。それぞれクリックすると左下にプレビューは出るのですが。以前は保存中の全画面が表示されていたのです。表示されるにはどうすればよいかお教えお願いします。今は一枚ずつ開いて確認しています。

  • 画像を表示させるプログラム

    こんばんわ。 現在、Javaで画像を表示させるアプレットを作っているのですが、画像が表示されません。 書いたソースは以下です。 import java.applet.Applet; import java.awt.*; /* <applet code="Panel.class" width="497" height="600"> </applet> */ public class Panel extends Applet { Image data; public void init() { data = getImage(getDocumentBase(),"2-1.gif"); } public void paint(Graphics g) { g.drawImage(data, 0, 0, data.getWidth(this), data.getHeight(this), this); } } 2-1.gifという画像ファイルを表示させたいと思っています。画像ファイルはソースファイルと同じディレクトリにあります。appletviewerで実行しているのですが画像がさっぱり表示されません。 SDKのバージョンは1.5を使っています。 お手数おかけしますが、ご教授の程よろしくおねがいします。

    • ベストアンサー
    • Java
  • マウスオン画像が表示されない(不思議な現象)

    お邪魔します。 gooブログ、シンプルのクリアブルーでカスタマイズ中です。 以前にマウスオンで表示させていた画像が トップを先頭固定にしてから変になったような気がします。(これが関係あるかどうか?) そこで新規投稿で、 <img src="http://blogimg.goo.ne.jp/user_image/10/e0/e766d1dd315072c684abf9b59b800b65.jpg"onmouseover="this.src='http://blogimg.goo.ne.jp/user_image/78/ec/ea118200fe07bc7f709c174ebfd20edc.jpg'"onmouseout="this.src='http://blogimg.goo.ne.jp/user_image/10/e0/e766d1dd315072c684abf9b59b800b65.jpg'">を貼り付けると 編集画面では上手く表示されているのに、投稿すると表示されていません。 編集画面に戻ると、タグが、<img>だけになっています。 いつもすみません よろしくお願い致します。

  • cakePHPについて

    現在、cakePHPを勉強しているのですが、分からなくて進めない箇所があり困っています。 ユーザーがフォームからデータを入力し、DBにデータを格納する際、フォーム項目にないデータを一緒に入力するためにはどうすればいいのか分かりません。 例)ユーザーフォーム入力欄 name email password ↓ ■DB側に格納したいデータ id(AUTO_INCREMENT) contact_id(問題箇所) name email password created modified 現在、下記のようなコードになっているのですが、ご教授頂ければ幸いです。 ■Controller/RequestController public function index(){ if(!empty($this->request->data)){ if($this->request->data[$this->Request->alias]['confirmed']){ //保存実行 //成功時に画面遷移・失敗時にメッセージを表示 if($this->Request->saveAll($this->request->data)){ $this->Session->setFlash('お申し込み有難う御座います。新規依頼が完了しました。'); $this->redirect(array('action' => 'index','controller' => 'details')); }else{ $this->request->data[$this->Request->alias]['confirmed'] == false; $this->Session->setFlash('新規依頼に失敗しました。'); } }else{ if($this->Request->saveAll($this->request->data, array('validate' => 'only'))){ //saveALLは値をまとめて保存するモデルメソッドだけど('validate' => 'only')にすることで //保存処理を行わずにバリデーションのみを実行することができます //入力データに問題がなかった場合は確認画面を呼び出し $this->render('confirm'); }else{ $this->Session->setFlash('エラーがあります。入力内容をご確認下さい。'); } } } }

    • 締切済み
    • PHP
  • mysqlに保存した画像の表示がうまくいかない

    phpとmysqlで検索システムを作っています。 今回、mysqlにテキストデータと一緒に画像も保存し検索結果を表示する時に画像も一緒に表示されるようにしたいと考えています。 ひとまずテキストデータは問題なく保存、検索、表示ともに正常に動作していますが、画像がどうしてもうまく表示されません。 DB内を確認してみると、保存はきちんとされているようなのですが。 わかる方がいらっしゃいましたら、アドバイスをいただけないでしょうか? 以下にコードの内容を記載します。テキストデータは正常に動作するので、画像の表示に関する部分だけ記載させて頂きます。 ※検索結果の該当フィールドのidをキーとして渡して、該当するidの画像(DB内のimage1)を表示する。 よろしくお願いします。 【mysqlテーブル】 create table entries ( id int not null auto_increment primary key, name varchar(255), address varchar(255), image1 MEDIUMBLOB NOT NULL, image2 MEDIUMBLOB NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 【result.php】 //画像表示箇所 <?php echo '<img src="get_image.php?id=' . $row['id'] . '">' ?> 【get_image.php】 <?php $id = $_GET['id']; header('Content-Type: image/jpg'); echo $row['image1']; ?>

    • ベストアンサー
    • PHP
  • cakephpでのダウンロード機能の実装について

    cakephpで画像のダウンロード機能を実装しています。 webroot/imgに画像は入っています。 controllerで public function download($filename = null){ $this->autoRender = false; $this->response->file('img/' . $filename); $this->response->download($filname); } とし、 viewで <?php echo $this->Html->link('ダウンロード', array('controller' => 'images','action' => 'download', $image['Model']['filename'])); ?> このようにリンクしています。 ファイル名が英語の画像は問題なくダウンロードできるのですが、ファイル名が日本語の画像がダウンロードできません。 The requested file img/日本語ファイル名.jpg was not found or not readable Error: The requested address '/illusts/image/%~.jpg' was not found on this server. リンクをクリックするとこのように表示されます。 webroot/imgにはちゃんと画像は入っているのですが・・・。 どのようにしたら、日本語名のファイルもダウンロードできるようになるのでしょうか。 どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう