- Notifications
You must be signed in to change notification settings - Fork 7.6k
Extended Input for Files
An extension to CI_Input to add support for uploaded files.
Extension parses the $_FILES array to reorder the array for better integration with Code Igniter's CI_Upload library.
Use $this->input->file("user_file"); to return an array of uploaded file data to pass to CI_Upload library.
Returned array includes remapped 'key' for ease of use as well as all appropriate $_FILES array key and value pairs.
Note: The class prefix "SM_" and file name should be replaced with the appropriate configuration value ("subclass_prefix") in your config.php file.
The input library from which this extends is loaded automatically by Code Igniter so you don't need to load the library yourself.
To install this extension, simply copy the file into your "application/libraries/" folder and edit the filename and class extension to match the appropriate configuration value, as mentioned above.
Usage:
//gather uploaded file array $file = $this->input->file("user_file");<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /* //******* // // filename: SM_Input.php // author: Zack Brown // date: 7th September 2010 // //******* */ //declare class class SM_Input extends CI_Input { /* //******* // // member variables // //******* */ //original, unprocessed $_FILES array var $_files = array(); //parsed array of file data var $files = array(); /* //******* // // internal methods // //******* */ //class constructor function SM_Input() { //call parent constructor parent::CI_Input(); //parse and reorder $_FILES array $this->_clean_input_files(); //debug log_message("debug", "SM_Input Class Initialized"); } //parse and reorder $_FILES array function _clean_input_files() { //save current $_FILES array $this->_files = $_FILES; //reset array of parsed files $this->files = array(); //check $_FILES array is valid if(is_array($this->_files) && count($this->_files) > 0) { //reset $_FILES array $_FILES = array(); //loop through array of $_FILES foreach($this->_files as $outer_key => $outer_value) { //count array of files $count = (is_array($outer_value['name']) ? count($outer_value['name']) : 0); //check outer value for array of file data if($count > 0) { //loop through array of file data foreach($outer_value['name'] as $inner_key => $inner_value) { //compile file data array key $key = $outer_key . ($count > 1 ? "_" . $inner_key : ""); //array of file data $file = array(); //gather file data from array of outer values $file['error'] = $outer_value['error'][$inner_key]; $file['name'] = $outer_value['name'][$inner_key]; $file['size'] = $outer_value['size'][$inner_key]; $file['tmp_name'] = $outer_value['tmp_name'][$inner_key]; $file['type'] = $outer_value['type'][$inner_key]; //append file key $file['key'] = $key; //save file data to $_FILES array $_FILES[$key] = $file; //check for single file if($count == 1) { //save file data to array of parsed data $this->files[$outer_key] = $file; } else { //save file data to array of parsed data $this->files[$outer_key][$inner_key] = $file; } } } else { //append file key $outer_value['key'] = $outer_key; //save file data to $_FILES array $_FILES[$outer_key] = $outer_value; //save file data to array of parsed data $this->files[$outer_key] = $outer_value; } } } } /* //******* // // helper methods // //******* */ //fetch an item from parsed array of file data function file($index = "", $xss_clean = false) { //return item from parsed array of files return $this->_fetch_from_array($this->files, $index, $xss_clean); } //fetch an item from original array of $_FILES data function _file($index = "", $xss_clean = false) { //return item from $_FILES array return $this->_fetch_from_array($this->_files, $index, $xss_clean); } //return array of parsed file data function files() { //return parsed file array return $this->files; } //return array of original $_FILES function _files() { //return original $_FILES array return $this->_files; } }