CodeIgniterを使ったフレームワークで、複数のファイルアップロードフィールドを作った場合、アップロード実行メソッドを「$this->upload->do_upload()」としてしまうと全てのフィールドがチェック対象になってしまう。
ファイル参照があったフィールドだけアップロードチェックを行いたい場合はどうしたら良いか。
調べたらdo_uploadメソッドの引数にフィールド名を入れれば良いだけだった。
とっても簡単。
$config["upload_path"] = "./image/"; $config["allowed_types"] ="gif|jpg|png"; $config["max_size"] ="100"; $config["max_width"] ="1024"; $config["max_height"] ="768"; $this->upload->initialize($config); if(!$this->upload->do_upload("フォームの対象フィールド名")) { // エラー処理 } else { // 成功! }
アップロードフィールドが沢山ある場合はフィールド名を値とした配列を使ってforeachでブンブンまわし、オリジナルのチェック関数を通してチェック処理を行えば管理がスムーズになる。
フィールドに値がセットされているかどうかは、スーパーグローバル変数「$_FILES」を使って判断すればok。
$fields = array("file_up1", "file_up2", "file_up3"); foreach($fields as $field) { // _upload_check_fncはフィールド名を引数に渡すと、 // 上記のファイルアップロード処理を実行するオリジナル関数 $this->_upload_check_fnc($field); }
ところで、このCodeIgniterのファイルアップロードクラス、アップロードしたファイル名を任意に決めるような機能がなさそうなんだけど、やっぱ無いんだろうか。
仕方ないので同じファイル名があった場合は、連番をつける設定にしてファイルをアップロードし、サーバーにファイルをアップロード後、任意の名前にリネームした。なんかスマートでないけど好きなファイル名にする場合はこんな感じにするしかない?