Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多次上载未按预期工作_Php_Codeigniter_File Upload - Fatal编程技术网

Php 多次上载未按预期工作

Php 多次上载未按预期工作,php,codeigniter,file-upload,Php,Codeigniter,File Upload,我有一个表单,允许用户添加任意多的上传表单。所以最初只有一个,你可以点击“添加更多”到。。。添加更多。有道理。每个输入如下所示: <input type="file" name="userfile[]" id="userfile[]"> $_FILES['userfile_tmp']['name'] = $_FILES['userfile']['name'][$i]; $_FILES['userfile_tmp']['type']

我有一个表单,允许用户添加任意多的上传表单。所以最初只有一个,你可以点击“添加更多”到。。。添加更多。有道理。每个输入如下所示:

<input type="file" name="userfile[]" id="userfile[]">
$_FILES['userfile_tmp']['name']                = $_FILES['userfile']['name'][$i];
$_FILES['userfile_tmp']['type']                = $_FILES['userfile']['type'][$i];
$_FILES['userfile_tmp']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile_tmp']['error']            = $_FILES['userfile']['error'][$i];
$_FILES['userfile_tmp']['size']                = $_FILES['userfile']['size'][$i];

但是,当您上载多个文件时,只上载第一个文件。下面是我的PHP。我正在使用CodeIgniter和文件上载库

$dir = random_string('alnum', 10);
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir);

$this->load->library('upload');
$error = 0;

for ($i = 0; $i < count($_FILES['userfile']['name']); $i++):
    $_FILES['userfile']['name']                = $_FILES['userfile']['name'][$i];
    $_FILES['userfile']['type']                = $_FILES['userfile']['type'][$i];
    $_FILES['userfile']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
    $_FILES['userfile']['error']            = $_FILES['userfile']['error'][$i];
    $_FILES['userfile']['size']                = $_FILES['userfile']['size'][$i];

    $config['upload_path']                         = '/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir;
    $config['allowed_types']                    = 'jpg|jpeg|gif|png';

    $this->upload->initialize($config);

    if ($this->upload->do_upload('userfile')):
        $error += 0;
    else:
        $error += 1;
    endif;
endfor;

if ($error > 0):
    $error = array('error' => $this->upload->display_errors());
    print_r($error);
else:
    $data = array('upload_data' => $this->upload->data());
    print_r($data);
endif;
$dir=random_字符串('alnum',10);
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir);
$this->load->library('upload');
$error=0;
对于($i=0;$i<计数($_文件['userfile']['name']);$i++):
$\u文件['userfile']['name']=$\u文件['userfile']['name'][$i];
$\u文件['userfile']['type']=$\u文件['userfile']['type'][$i];
$\u FILES['userfile']['tmp\u name']=$\u FILES['userfile']['tmp\u name'][$i];
$\u文件['userfile']['error']=$\u文件['userfile']['error'][$i];
$\u文件['userfile']['size']=$\u文件['userfile']['size'][$i];
$config['upload_path']='/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir;
$config['allowed_types']='jpg | jpeg | gif | png';
$this->upload->initialize($config);
如果($this->upload->do_upload('userfile')):
$error+=0;
其他:
$error+=1;
endif;
endfor;
如果($error>0):
$error=array('error'=>$this->upload->display_errors());
打印错误($error);
其他:
$data=array('upload_data'=>$this->upload->data());
打印(数据);
endif;
如果在for循环之前添加一个
回显计数($\u FILES['userfile']['name'];
),它将正确显示文件数。如果在for循环之后使用它,它将错误显示1


你知道我做错了什么吗?

我的猜测是,一旦你进入循环,你就会用以下几行覆盖这些值:

$_FILES['userfile']['name']                = $_FILES['userfile']['name'][$i];
$_FILES['userfile']['type']                = $_FILES['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']            = $_FILES['userfile']['error'][$i];
$_FILES['userfile']['size']                = $_FILES['userfile']['size'][$i];
尝试将其更改为以下内容:

<input type="file" name="userfile[]" id="userfile[]">
$_FILES['userfile_tmp']['name']                = $_FILES['userfile']['name'][$i];
$_FILES['userfile_tmp']['type']                = $_FILES['userfile']['type'][$i];
$_FILES['userfile_tmp']['tmp_name']        = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile_tmp']['error']            = $_FILES['userfile']['error'][$i];
$_FILES['userfile_tmp']['size']                = $_FILES['userfile']['size'][$i];

然后使用
if($this->upload->do\u upload('userfile\u tmp')):

问题在于以下几行:

$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];

您正在用另一个值、一个字符串覆盖变量、一个数组。

几个月前,我遇到了这个问题,并扩展了核心库,以允许使用单个文件或文件数组(如您所希望的)并适当地显示错误等

它似乎适用于我使用它的目的,不能保证它100%有效,但看看它是否有帮助,我想我用我所做的更改评论了不同的部分: