home>>PHP FW Kohanaを使う>>Kohanaの基本動作覚書

Kohanaの基本動作覚書

mimeタイプの判定について

画像に限らず、mimeタイプの取得は悩ましいところで、最初はヘルパーとして付いていたfile::mime()メソッドを利用して$mime = $file::mime(ファイルのフルパス);としたのだけけれど、非画像系ファイルのタイプ情報を正しく獲得できなかった。

system/helpers/file.phpを見たところ、下記のような判定順序が書かれていた。

mimeタイプの判定優先順

jpg,pngなどの画像ファイル:getimagesize関数で得る。

それ以外のもの。
 (1)phpのfinfo_open関数が有効な時にはFILEINFO_MIME
 (2)php.iniでmime_magic.magicfileが有効
    かつ、mime_content_typeがある時にはそれに従う
 (3)OSがMS-WINDOWS以外のものならば、
   fileコマンドを探し、システムのmime定義に従う
 (4)kohanaのconfig/mimes.phpでのタイプ情報を利用

MacPortに任せっきりで*.iniなどの設定変更を見向きもしていないぼくの環境では、(1)(2)(3)が正しく設定されておらず、結果(3)が動作して誤判定されていた。もちろんKohanaは悪くはない。Kohanaを断固擁護したい。というのも、PHPやOSにゆだねられるものはそちらを優先するというのは、まっとうな考え方だからである。

なので(1)-(3)のうちどれかを、ユーザがちゃんと設定すればいいのだが、面倒なので、これも断固、ぼくはやりませんでした(家訓です)。

で、ヘルパーを使うのを諦め、mimeタイプ取得が必要な局面では、

---

$e = strtolower(substr(strrchr(ファイル名, '.'), 1));
$extension = $e[0];

と書いて、Kohana::config('mimes.'.$extension);で取得した。このコードは、Kohana自身が上の(4)的処理で使っているもので、おかげでKohana::configの使い方を覚えたので無駄ではなかったのさ、と言い張っておく。

なお、ファイルタイプを扱うためにはconfig/view.phpの中で、有効にしたい拡張子を加えてやらなければいけません。

view.phpで最初から許可されている拡張子

$config['allowed_filetypes'] = array
(
	'gif',
	'jpg', 'jpeg',
	'png',
	'tif', 'tiff',
	'swf',
	'htm', 'html',
	'css',
	'js'
);













annex

補足情報はありません













note