夜の Discovery このページをアンテナに追加 RSSフィード

セイバーメトリクス対応!野球の成績・チーム・試合管理の決定版!『ガチャスポ ベースボール』

2007-08-10

コントローラ経由で画像を表示する方法

例えば、アプリケーションにログインしている人のみ画像を閲覧できるというようにしたい場合や、

データは論理削除するが論理削除したデータの画像は見せないようにしたい場合(当たり前)に、

コントローラ経由で画像を表示したいときがある。

<img src="/users/img/1" />

の場合、コントローラ

function img($id = null) {
  ($id の妥当性確認や表示の可否判定)
  $image = $this->User->read(null, $id);
  $mime_type = "application/octet-stream";
  if (!empty($image)) {
    $file_path = (どうにかしてファイルパスを取得);
    $image_info = getimagesize($file_path);
    if ($image_info) {
      $mime_type = $image_info['mime'];
    }
  } else {
    (画像がない場合の処理)
  }
  Header("Content-type: {$mime_type}");
  echo readfile($file_path); 
}

のようにすることで画像を表示することができた。

ただ、このやり方は

  • $id は妥当な値かの検証が必要。
  • echo readfile のあたりが php に詳しくないのでもっと良い方法があるのか不明。

という心配点もある。

トラックバック - http://d.hatena.ne.jp/kusakari/20070810/1186745821