【问题标题】:multiple file upload in codeigniter在codeigniter中上传多个文件
【发布时间】:2014-11-10 10:14:37
【问题描述】:

我正在尝试在 Codeigniter 中上传多个文件。我为此使用以下代码

$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;
                        }

我只上传了数组中的第一个文件..数组中的其余文件没有上传...这段代码有什么问题...我无法弄清楚...请帮助我.. 提前致谢

【问题讨论】:

    标签: php codeigniter file-upload


    【解决方案1】:

    我在这里看到两个问题。第一:

    $_FILES['userfile']['size'] 将以字节为单位返回文件的体积...由于它是一个整数,所以count 函数每次都会返回1。请改用数组$_FILES['userfile']['tmp_name']

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

    然后,您将覆盖$_FILES 超全局。所以你将不得不使用一个局部变量来保存它:

    $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();
    }
    

    【讨论】:

    • 感谢重播...但它不起作用..仍然只有第一个文件上传。当我调试时我发现 $_FILES['userfile'][''] 之后没有赋值第一次迭代..它的原因是什么?任何想法或建议都会对我很有帮助
    • @sarincm99 是的,抱歉,我没有注意到这里的第二个问题。检查我的编辑
    • @Brewal ..非常感谢..它有效..一个简单的修复..但无法弄清楚..你救了我...再次感谢 brewal
    【解决方案2】:

    将此代码添加到您的控制器内部方法中。

    $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);
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2012-03-07
      • 2015-01-07
      相关资源
      最近更新 更多