Php 使用code igniter上载多个文件时覆盖超级全局$\文件的原因是什么
假设post请求已经验证,功能代码已经足够好了,只需观察多文件上传代码Igniter示例代码如下所示 人们关心的是,为什么像$\u文件这样的超全局变量会被覆盖?这是一个好的做法吗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'
$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类一起使用的一种攻击。