FuelPHP ファイルアップロードについて試してみました。公式マニュアルの Upload Class を見ると、ホワイトリストとブラックリストが用意されています。両方設定したらどうなるのか?を試してみました。
その前に、フォームの作成で引っかかりました。Form::open
, Form::file
を使ったのですが、enctype="multipart/formdata"
を自分で指定する必要がありました。
Form::open(array('action' => 'submit', 'enctype' => 'multipart/formdata'));
のように記述する必要があります。
なお FuelPHP では、オブジェクト指向でフォームを作る Fieldset も用意されていますが、こちらの場合は set_config('form_attributes', array('enctype' => 'multipart/form-data'))
を使うようです(公式フォーラムの Multipart form-data with Fieldsetsを参照)。
ホワイトリストとブラックリストの話に戻ります。許可不許可の設定は、Upload::process
の引数として指定することができます。例えば、拡張子がjpg, jpeg, gif, pngのいずれか、であれば下のようになります。
$config = array( 'ext_whitelist' => array('jpg', 'jpeg', 'gif', 'png'), ); Upload::process($config);
指定しなかった場合は、config ディレクトリにある設定ファイルの指定が適用されます。
ext_whitelist
と対になる設定項目 ext_blacklist
もあります。
$config = array( 'ext_blacklist' => array('pdf', 'docx'), 'ext_whitelist' => array('jpg', 'jpeg', 'gif', 'png'), );
のような場合、pdf や docx が許可されないのはもちろんですが、jpg, jpeg, gif, png 以外のものも許可されません。ext_blacklist
, ext_whitelist
の順序を入れ替えても同じでした。ホワイトリストが優先されるようです。 ブラックリストとホワイトリスト両方パスする必要があります。FuelPHP ホワイトリストとブラックリスト その2を参照。
今回は拡張子をとりあげましたが、公式マニュアルには mime type によるチェック方法も載っています。(アップロードを許可するユーザーの種別にもよりますが)拡張子よりこちらのほうが本来は良いでしょう。
※追記
CodeIgniter では、わざわざ指定した記憶が無いな、と思ってしらべてみたら、フォームヘルパーに form_open_multipart
というのがありました。