file_get_contentsで画像やFlashを表示とか

目から鱗」というか何というか、こういう使い方をしたことがなかったので、メモとして残しておく。

経緯

詳細は省くけど、

  1. ある条件によって表示するものを変える
  2. リダイレクトはなしよ

というのをやりたくて、何だか簡単にできそうで、でもうまいことできなくて困っていた。
そんな時、大先輩に『それ、file_get_contentsでできるよ』とアドバイスをいただき、無事に解決。
いやぁ、すごく助かった。感謝感謝。


マニュアルを確認

PHPマニュアルのfile_get_contents

file_get_contents ― ファイルの内容を全て文字列に読み込む

今まで、↑の説明のとおりの使い方しかしてなかった。

注意: この関数はバイナリデータに対応しています。

でも、今回は↑にあるように、画像(jpg)とかFlash(swf)とかを読み込んで表示させるのに使用した。


処理の流れ

実際の処理の流れとしては、

  1. ファイルを読み込む
  2. ヘッダを指定する("Content-type"とか)
  3. 出力する

こんなもん。

サンプル

以下にサンプルコードを載せておく。

  • 画像
<?php
// 読み込むファイルを指定
$uri = './hoge.jpg';

// headerを指定
$size = filesize($uri);
header("Content-Length: $size");
header("Content-type: image/jpeg");

// ファイルを出力
echo file_get_contents($uri);
<?php
// 読み込むファイルを指定
$uri = './fuga.swf';

// headerを指定
$size = filesize($uri);
header("Content-Length: $size");
header("Content-type: application/x-shockwave-flash");

// ファイルを出力
echo file_get_contents($uri);

こんな感じでできる。