在codeigniter中上传图像,是必需的用户文件


uploading images in codeigniter, is userfile required?

我正在使用下面的函数将我的图像文件上传到我的服务器(Localhost)。一切正常,图像正在上传中。但我需要两个图像字段,因此两个图像都应该在点击提交按钮后上传。我使用了这里描述的函数Codeigniter多文件上传,但它不起作用。

我收到这个错误消息

A PHP Error was encountered
Severity: Warning
Message: is_uploaded_file() expects parameter 1 to be string, array given
Filename: libraries/Upload.php
Line Number: 161

我不明白错误在哪里。我用来上传单个图像的功能是

function do_upload()
    {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'jpeg|png|gif';
        $config['max_size'] = '0';
        $config['max_width']  = '0';
        $config['max_height']  = '0';
        $this->load->library('upload', $config);
        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());
           //failed display the errors
        }
        else
        {
            //success
        }
    }

此外,我还想问我是否可以更改我选择的输入字段名称。即我总是需要实现CCD_ 1。可以更改名称吗?我尝试更改它,得到消息没有选择任何文件,所以这一定意味着我无法更改它。

您必须循环浏览上传的文件,就像您提供的链接中显示的那样。

function do_upload() {
        $config['upload_path'] = './uploads/';
        $config['allowed_types'] = 'jpeg|png|gif';
        $config['max_size'] = '0';
        $config['max_width']  = '0';
        $config['max_height']  = '0';
        $this->load->library('upload', $config);
        foreach ($_FILES as $key => $value) {
            if (!empty($value['tmp_name'])) {
                if ( ! $this->upload->do_upload($key)) {
                    $error = array('error' => $this->upload->display_errors());
                    //failed display the errors
                } else {
                    //success
                }
            }
        }
}

尝试使用这样的HTML:

<input type="file" name="file1" id="file_1" />
<input type="file" name="file2" id="file_2" />
<input type="file" name="file3" id="file_3" />

您可以根据需要更改输入字段的名称。

如果使用文件多选,请执行以下操作:

HTML(使用数组名称输入HTML5文件可以选择多个文件):

<input type="file" name="userfile[]"/>

<input type="file" name="userfile[]"/>
<input type="file" name="userfile[]"/>

CodeIgniter:中的PHP

// load upload library (put your own settings there)
$this->load->library('upload', array('allowed_types' => 'svg|gif|jpg|png', 'upload_path' => $GLOBALS['config']['upload_path'], ));
// normalise files array
$input_name = 'userfile'; // change it when needed to match your html
$field_names = array('name', 'type', 'tmp_name', 'error', 'size', );
$keys = array();
foreach($field_names as $field_name){
    if (isset($_FILES[$input_name][$field_name])) foreach($_FILES[$input_name][$field_name] as $key => $value){
        $_FILES[$input_name.'_'.$key][$field_name] = $value;
        $keys[$key] = $key;
    }
}
unset($_FILES[$input_name]); // just in case
foreach ($keys as $key){
    $new_file = $this->upload->do_upload($input_name.'_'.$key);
    // do your stuff with each uploaded file here, delete for example:
    $upload_data = $this->upload->data();
    unlink($upload_data['file_name']);
}