当 在codeigniter上传多个文件时,我收到错误 ,就像这样,
致命错误:... / system \ libraries \ Upload.php
中不支持的操作数类型
if(isset($_FILES['med_file']))
{
$config['upload_path'] = './medical_history_doc/';
$config['allowed_types'] = 'jpg|jpeg|png|doc|docx|pdf|txt';
$this->load->library('upload', $config);
$files = $_FILES;
$cpt = count($_FILES['med_file']['name']);
for($i=0; $i<$cpt; $i++)
{
if($files['med_file']['name'][$i] !="")
{
$_FILES['med_file']['name']= $files['med_file']['name'][$i];
$_FILES['med_file']['type']= $files['med_file']['type'][$i];
$_FILES['med_file']['tmp_name']= $files['med_file']['tmp_name'][$i];
$attachment_name=$files['med_file']['name'][$i];
$path_info=pathinfo($attachment_name);
$file_extension=@$path_info['extension'];
$path_part_filename=$path_info['filename'];
$rename_file=str_replace(" ","",$path_part_filename).'_'.date('Ymdhis');
if(!empty($rename_file))
{
$_FILES['med_file']['name'] = $rename_file.'.'.$file_extension;
$medical_history_files[]=$rename_file.'.'.$file_extension;
if($this->upload->do_upload('med_file'))
{
$file_upload='true';
}
else if(!$this->upload->do_upload('med_file'))
{
$file_upload="fail";
$error= $this->upload->display_errors();
$this->session->set_flashdata('sucess', $error);
}
}
}
}
}
}
和我的查看页面代码是这样的。
<form method="post" name="medicalhistory" id="medicalhistory"
enctype="multipart/form-data">
<input id="med_file" type="file" name="med_file[]" multiple>
</form>
请帮我解决这个问题。感谢
答案 0 :(得分:2)
你在这里错过了几件事。首先,你的HTML form
应该有一个属性action
指向你的控制器方法。其次,$_FILES
数组应始终包含以下内容:name, type, tmp_name, error, size
但是,在循环中,您只能使用name, type, tmp_name,
进行重建,而您却忘记了其他数据。您还在将文件发送到上载库之前重命名该文件。您应该通过在发送到库的config
数组中进行设置来完成此操作。我会以下列方式重做代码:
第1步:确保HTML表单具有操作属性:
<form action="<?= base_url()?>controller/upload" ..
第2步:检索文件并取消设置原始$ _FILES,以便重建阵列:
$uploaded_files = $_FILES['med_file'];
unset($_FILES);
第3步:遍历获取的文件并将$ _FILES数组重建为多维数组:
foreach ($uploaded_files as $desc => $arr) {
foreach ($arr as $k => $string) {
$_FILES[$k][$desc] = $string;
}
}
第4步:加载上传库,然后设置配置选项
$this->load->library('upload');
$config['upload_path'] = './medical_history_doc/';
$config['allowed_types'] = 'jpg|jpeg|png|doc|docx|pdf|txt';
步骤5:循环遍历新的$ _FILES数组,重命名您的文件并将config['filename']
设置为新名称。初始化您的上传,然后运行它:
foreach ($_FILES as $k => $file) {
$path_info = pathinfo($file["name"]);
$file_extension = $path_info['extension'];
$path_part_filename = $path_info['filename'];
$config['file_name'] = str_replace(" ", "", $path_part_filename) . '_' . date('Ymdhis') . '.' . $file_extension;
$this->upload->initialize($config);
if (!$this->upload->do_upload($k)) {
$errors = $this->upload->display_errors();
var_dump($errors);
} else {
var_dump("success");
}
}
最终结果:
查看强>:
<form action="<?= base_url()?>controller/upload" method="post" id="medicalhistory" enctype="multipart/form-data">
<input id="med_file" type="file" name="med_file[]" multiple>
<input type="submit">
</form>
<强>控制器:强>
public function upload() {
$uploaded_files = $_FILES['med_file'];
unset($_FILES);
foreach ($uploaded_files as $desc => $arr) {
foreach ($arr as $k => $string) {
$_FILES[$k][$desc] = $string;
}
}
$this->load->library('upload');
$config['upload_path'] = './medical_history_doc/';
$config['allowed_types'] = 'jpg|jpeg|png|doc|docx|pdf|txt';
foreach ($_FILES as $k => $file) {
$path_info = pathinfo($file["name"]);
$file_extension = $path_info['extension'];
$path_part_filename = $path_info['filename'];
$config['file_name'] = str_replace(" ", "", $path_part_filename) . '_' . date('Ymdhis') . '.' . $file_extension;
$this->upload->initialize($config);
if (!$this->upload->do_upload($k)) {
$errors = $this->upload->display_errors();
var_dump($errors);
} else {
var_dump("success");
}
}
}