質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • HTML

    8706questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • MySQL

    5708questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CakePHP

    2271questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

CakePHPで,MySQLに保存した画像をHTMLヘルパーを使って表示する方法は??

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,891

KinoshitaYusaku

score 173

プログラム初心者です。

MySQLに保存している画像を、
HTMLヘルパーで表示するにはどのように書けばいいでしょうか?

ちなみに今は、viewのとこに、
下記のようにコードを記述していて、
<dt><?php echo __('Image'); ?></dt>
    <dd>
        <?php echo $this -> Html->image('/contents/'."{$user['User']['id']}", array('alt' => 'ProfileImage')); ?>
        &nbsp;
    </dd>

ブラウザではこのように表示されます…。

イメージ説明
どのように書けば画像表示されるのでしょうか…??

どなたか教えて頂けますと幸いです。。。

よろしくお願いします
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lv_sane

    2015/03/04 15:09

    タイトルが「de」になっているので「で」に変更お願いします。

    キャンセル

  • KinoshitaYusaku

    2015/03/04 15:11

    ご指摘ありがとうございます。変更しました!

    キャンセル

回答 3

+3

HtmlHelper::image は、デフォルトではapp/webroot/img を参照するようですね

CakePHPでimgディレクトリ以外の画像を表示するには - ノイズビン にあるように、/ をパス指定の先頭に追記することでapp/webroot/ を起点に自由に参照ディレクトリを変えられるのですね


さて、<?php ... image('/contents/'."{$user['User']['id']}", ...); ?> と記述していますが、この出力結果はブラウザで確認されましたでしょうか

どのようにアプリケーションが作成されているかはわかりませんが:

アップロードされたプロフィール画像がapp/webroot/contents/[user_id][file_extention] の形式で保存されているとした場合

記述通りID だけであれば おそらく出力結果に拡張子がないので、ファイルの拡張子を付与する必要があるかもしれません

そうではなく、User テーブルにファイルパスを格納しているカラムがあるのなら、そちらを参照するよう コードを書き換える必要があるでしょう
eg. ... image("/contents/{$user['User']['profile_image_filename']}"); ...


Chrome ほか、ブラウザに用意されている開発者ツールを使って出力されたソースを見てみるのも、問題解決の糸口をつかむひとつの方法です

Web開発でよく使う、特に使えるChromeデベロッパー・ツールの機能 - Build Insider
HtmlHelper — CakePHP Cookbook 2.x ドキュメント

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/01/02 19:46

    goufさん、ありがとうございます!

    HtmlHelper::image は、デフォルトではapp/webroot/img を参照するのですね…!
    なるほど!!!
    そこがよく分かってなかったので、<?php ... image('/contents/'."{$user['User']['id']}", ...); ?>はどこかのサイトのQ&Aを参照にしてテキトーに指定してました。。。

    画像はMySQLのusersテーブルのcontentsカラム内に保存していたので、
    下記のように記述を変更したら画像表示されました!

    echo $this -> Html->image('http://●●●●.sakura.ne.jp/cakeSNS/users/contents/'."{$user['User']['id']}", array('alt' => 'ProfileImage')); ?>

    キャンセル

+1

イメージ表示コントローラ
class ImageController extends AppController {

    public $name = 'Image';
    public $uses = array('TImage');
    public $autoRender = false;
    public $autoLayout = false;

    // 初期処理
    public function beforeFilter() {
        parent::beforeFilter();
    }

    // 登録イメージ描画処理
    public function imageview(){
        $param = $this->params['url']['cd'];

        $rec = $this->TImage->getTImage($param);
        header("Content-type: " . $rec[0]['t_image']['type']);
        echo $rec[0]['t_image']['image'];
    }
}

テーブル定義
CREATE TABLE IF NOT EXISTS t_image (
imagecd int(11) NOT NULL,
  cmt varchar(300) DEFAULT NULL COMMENT '画像コメント',
  type varchar(50) DEFAULT NULL COMMENT '画像タイプ',
  image longblob COMMENT '画像',
  name varchar(300) DEFAULT NULL,
  size int(11) DEFAULT NULL,
  width int(11) DEFAULT NULL,
  height int(11) DEFAULT NULL,
  delflg tinyint(2) NOT NULL DEFAULT '0',
  insdt timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '登録日時'
) ENGINE=MyISAM AUTO_INCREMENT=272 DEFAULT CHARSET=utf8 COMMENT='イメージ登録テーブル';

モデル
public function getTImage($imagecd = null) {

$sql = "SELECT "
     .     "* "
     . "FROM "
     .     "t_image "
     . "WHERE "
     .     "imagecd = ?;";

    $data[] = $imagecd;

   return $this->query($sql,$data);
}

HTML
<img src="/image/imageview?cd='.$imageid.'" />

こちらですが、データベースに保存されているイメージをHTMLイメージタグで表示するロジックになります。
オリジナルソースなので参考までに記載させて頂きます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

基本的にはtakayukiinabaさんの方法が良いと思います。
他の方法として、画像のバイナリデータをbase64エンコードしてHTMLに埋め込む方法もあります。
Viewなどで・・

<?php
$img = base64_encode($user['User']['Image']);
?>
<img src="data:image/gif;base64,<?php echo $img; ?>">


などとすればよさそうです。

参考URL
http://kaworu.jpn.org/kaworu/2008-04-06-1.php

サムネイルなどの小さい画像であればbase64方式が簡単かもしれませんが、大きい画像だとHTMLが馬鹿でかくなるのでお勧めできません。
別コントローラーの方式だと直リンクされた場合画像を見せたくない場合はいろいろ考慮が必要です。

一長一短あるので合わせて使い分けるのがよさそうです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • HTML

    8706questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • MySQL

    5708questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CakePHP

    2271questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。