1

I am trying multiple file upload in Codeigniter.I uses following code for this

$count = count($_FILES['userfile']['size']);
    for($s=1; $s<=$count; $s++) {
            $_FILES['userfile']['name']= $_FILES['userfile']['name'][$s];
            $_FILES['userfile']['type']= $_FILES['userfile']['type'][$s];
            $_FILES['userfile']['tmp_name']=$_FILES['userfile']['tmp_name'][$s];
            $_FILES['userfile']['error']=  $_FILES['userfile']['error'][$s];
            $_FILES['userfile']['size']= $_FILES['userfile']['size'][$s];
            $this->upload->initialize($this->set_upload_options());
            $this->upload->do_upload();
    }
    private function set_upload_options(){
                         $config = array();
                        $config['upload_path'] = './images/';
                        $config['allowed_types'] = 'gif|jpg|png';
                        $config['max_size'] = '100';
                        $config['max_width']  = '1024';
                        $config['max_height']  = '768';
                        return $config;
                        }

I am getting only first file in array uploaded..rest of files in array are not uploaded...is there anything wrong in this code...i cant figure it out...please help me.. Thanks in advance

0

2 Answers 2

2

I see two problems here. First :

$_FILES['userfile']['size'] will return the volume of the files in bytes... As it is an integer, the count function will return 1 every time. Use the array $_FILES['userfile']['tmp_name'] instead :

$count = count($_FILES['userfile']['tmp_name']);

Then, you are overwriting the $_FILES superglobal. So you will have to use a local variable to save it :

$count = count($_FILES['userfile']['tmp_name']);
$files = $_FILES;
for($s=1; $s<=$count; $s++) {
    $_FILES['userfile']['name']= $files['userfile']['name'][$s];
    $_FILES['userfile']['type']= $files['userfile']['type'][$s];
    $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$s];
    $_FILES['userfile']['error']= $files['userfile']['error'][$s];
    $_FILES['userfile']['size']= $files['userfile']['size'][$s];
    $this->upload->initialize($this->set_upload_options());
    $this->upload->do_upload();
}
Sign up to request clarification or add additional context in comments.

3 Comments

thanks for replay...but it doesn't works..still only first file uploads.when i debug i found that $_FILES['userfile'][' '] is not assigning value after first iteration..what is the reson for it?? any idea or suggestion will be very helpful for me
@sarincm99 Ho yes, sorry I didn't notice the second problem here. Check my edit
@Brewal..thanks a lot..it works..a simple fix..but cant figure it out..you saved me...Thanks again brewal
0

Add this code in your controller inside method.

$image_path = $this->input->post('userfile');

      $count = count($_FILES['userfile']['name']);   //If file choosen to upload then ex
     // print_r($_FILES); die();
        $files = $_FILES['userfile']['name'];
        $type  = $_FILES['userfile']['type'];
        $tmp_name  = $_FILES['userfile']['tmp_name'];
        $error = $_FILES['userfile']['error'];
        $size = $_FILES['userfile']['size'];
       //print_r($files); die();
   // print_r($_FILES['userfile']['name']); die();
      for ($i=0; $i <$count ; $i++) 
          # code...
                      {

                //File Upload Configuration.
                $config['upload_path'] = 'new/';
                //echo $config['upload_path'].'<br>';
                $config['allowed_types'] = 'gif|jpg|png|JPG|PNG|GIF';
                $config['max_size'] = '3048';
                $config['overwrite'] = false;
                $config['remove_spaces'] = true;
                $config['encrypt_name'] = TRUE;
                $image_path_name = 'userfile';



                 $_FILES['userfile']['name']=$files[$i];
                $_FILES['userfile']['type']    = $type[$i];
                $_FILES['userfile']['tmp_name'] = $tmp_name[$i];
                $_FILES['userfile']['error']       = $error[$i];
                $_FILES['userfile']['size']    = $size[$i]; 
                $this->load->library('upload', $config); //Load library
                $this->upload->initialize($config);

                if (!$this->upload->do_upload($image_path_name))
                {
                   $this->session->set_flashdata('file','File not uploaded');
                   redirect('front/prop_sale');
                }
                else
                {
                    // File uploaded successfully


                    $image_path[$i] = base_url().'new/'.$this->upload->file_name;

                    //print_r($image_path);
                }
            }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.