In my CodeIgniter project I'm uploading files during the project creation. Here's the uploading function:
function uploadFiles(){
$this->load->library('upload');
$error = 0;
$projectName = $_POST['projectname'];
mkdir('./uploads/'.$projectName);
for($i=0; $i<count($_FILES); $i++)
{
$_FILES['userfile']['name'] = $_FILES['files']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['files']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['files']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['files']['size'][$i];
$config['upload_path'] = './uploads/'.$projectName;
$config['allowed_types'] = 'xml|etl';
$config['max_size'] = '0';
$config['overwrite'] = TRUE;
$this->upload->initialize($config);
if($this->upload->do_upload())
{
$error += 0;
}else{
$error += 1;
}
}
if($error > 0){ return FALSE; }else{ return TRUE; }
}
And I call this function in the create_project function like this:
public function create_project() {
$this->load->library('form_validation');
$this->form_validation->set_rules('projectname', 'Project name', 'required');
$this->form_validation->set_message('required', 'This is an obligatory field');
if($this->form_validation->run() == FALSE) {
$this->load->view('project_creation_view');
} else {
$this->load->model('Project_management_model');
$this->Project_management_model->create_project();
$this->uploadFiles();
}
}
However this does not do anything. The files are not being uploaded. Even an empty directory is not being created. Could anybody help me to find the error?
Thanks.
I modified Cubed Eye's MY_upload to return the file information of all files uploaded. As it was, only the last file's information was accessible when calling the data method. I also added the IP address of the uploader to that list.
http://pastebin.com/tG8A85gY
It can be utilized by the following:
I realize this would be better off as an edit to Cubed Eye but this is my first post, I have no reputation.
I can't comment yet because of my reputation level but Zoom made a comment under the accepted answer about the $fieldname variable being an array which caused an error. I had the same issue with that answer and found out that it was because I had appended all my file input names on the form with [] which made php pick up the those inputs as an array variable. To resolve that issue just give each file input a unique name instead of making it a PHP array. After I did that, the issue went away for me and the accepted answer worked like a charm. Just thought I'd pass the info along for anyone else who stumbles across this issue.
This is an extension of the CI_Upload class that I modified to upload multiple files, just copy this to the MY_Upload.php file. It also makes the directory as well.
http://pastebin.com/g9J6RxW1
Then all you need to do in the controller function is arrange your files into the an array, where the name of the field and the key are the array keys and the config is the data. In you case something like this:
IF all the files configs are the same just make a for loop to set this up, it will also take 'named keys', ie.
$project_files['files']['file_key']
.then just call:
I think you missed this:
For the simplicity,I've created this CI helper file.You can load it from config file & use anywhere in your project.It just take 3 patrameters
@fileobject = name of HTML file object
@fileopath = file path that you want to upload
@filetypes = default *,ex- 'jpg|png|mp4|pdf'
Tested & proven.
Thought I saw this same exact question here before ;)
Try outputting $this->upload->display_errors() where you're incrementing the $error variable. That will tell you exactly what went wrong. My money's on permissions...