ethnaで画像ファイルをDBに登録して表示
色々はまったからメモ代わりに記載する。
DBに登録
基本的にはここに書いてあるコードっぽくやれば登録できる。ただし、DB登録にethnaのDBオブジェクトを使用して登録しようとする場合には注意が必要。ethnaのフレームワークが頭がいいから、addslashes()関数を使用してエスケープシーケンスを行った後に登録している。なので、二重にやると画像ファイルが壊れてしまうためにaddslashes()を行ってはならない。
画像の表示
画像表示用のactionファイルを作成して、アクセスするほうがきれいだと思う。keyとなるidを渡してそれを表示するだけのimgageとかいうアクションを作成するとうまくいく。表示方法にSmartyのテンプレートを使用するのは非常に馬鹿らしい。なので、actionファイルのperform関数でprint関数を使用して表示してしまったほうがよい。具体的には以下のようなコード
<?php function perform() { $db =& new Estate_DB($this->backend->getDB()); $id = $this->af->get('id'); // 画像ファイルの取得 $photo =$db->db_get($id); // ヘッダー情報の付与。これをやらないとブラウザがわからない。 mb_http_output("pass"); header("Content-type:" . $photo['type']); header("Content-Disposition: inline; filename=" . $photo['file_name']); // 画像データの表示 print $photo['bin']; return; } ?>
っで、読み込み側はソースとしてそのデータを読み込む感じ。