Php 使用code igniter上载多个文件时覆盖超级全局$\文件的原因是什么

Php 使用code igniter上载多个文件时覆盖超级全局$\文件的原因是什么,php,codeigniter,file,file-upload,superglobals,Php,Codeigniter,File,File Upload,Superglobals,假设post请求已经验证,功能代码已经足够好了,只需观察多文件上传代码Igniter示例代码如下所示 人们关心的是,为什么像$\u文件这样的超全局变量会被覆盖?这是一个好的做法吗 $filesCount = count($_FILES['files']['name']); for($i = 0; $i < $filesCount; $i++){ $_FILES['file']['name'] = $_FILES['files'

假设post请求已经验证,功能代码已经足够好了,只需观察多文件上传代码Igniter示例代码如下所示

人们关心的是,为什么像$\u文件这样的超全局变量会被覆盖?这是一个好的做法吗

        $filesCount = count($_FILES['files']['name']);
        for($i = 0; $i < $filesCount; $i++){
            $_FILES['file']['name']     = $_FILES['files']['name'][$i];
            $_FILES['file']['type']     = $_FILES['files']['type'][$i];
            $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
            $_FILES['file']['error']     = $_FILES['files']['error'][$i];
            $_FILES['file']['size']     = $_FILES['files']['size'][$i];

            // File upload configuration
            $uploadPath = 'uploads/files/';
            $config['upload_path'] = $uploadPath;
            $config['allowed_types'] = 'jpg|jpeg|png|gif';

            // Load and initialize upload library
            $this->load->library('upload', $config);
            $this->upload->initialize($config);

            // Upload file to server
            if($this->upload->do_upload('file')){
                // Uploaded file data
                $fileData = $this->upload->data();
                $uploadData[$i]['file_name'] = $fileData['file_name'];
                $uploadData[$i]['uploaded_on'] = date("Y-m-d H:i:s");
            }
        }
$filescont=count($_FILES['FILES']['name']);
对于($i=0;$i<$filescont;$i++){
$\u文件['file']['name']=$\u文件['FILES']['name'][$i];
$\u文件['file']['type']=$\u文件['FILES']['type'][$i];
$\u FILES['file']['tmp\u name']=$\u FILES['FILES']['tmp\u name'][$i];
$\u文件['file']['error']=$\u文件['FILES']['error'][$i];
$\u文件['file']['size']=$\u文件['FILES']['size'][$i];
//文件上载配置
$uploadPath='uploads/files/';
$config['upload_path']=$uploadPath;
$config['allowed_types']='jpg | jpeg | png | gif';
//加载并初始化上载库
$this->load->library('upload',$config);
$this->upload->initialize($config);
//将文件上载到服务器
如果($this->upload->do_upload('file')){
//上载的文件数据
$fileData=$this->upload->data();
$uploadData[$i]['file_name']=$fileData['file_name'];
$uploadData[$i]['uploaded_on']=日期(“Y-m-d H:i:s”);
}
}
实际上,
do_upload()
函数只接受表单名称

默认情况下,上载例程希望文件来自一个名为
文件
的表单字段,并且表单类型必须为
多部分
(enctype=“多部分/表单数据”)

这是我们重写
$\u文件
变量的主要原因


我猜CI的上传类直接使用了
$\u文件
数组(我认为这是一种不好的做法)。表单似乎命名为
文件
,而这是将每个文件设置为键
文件
,然后CI的上载类将使用该键。不过,我不认为这是一种好的做法,它只是对将多个上传与CI的upload类一起使用的一种攻击。