CodeIgniter 3.1.11 使用$this->input->post()无法获取提交的CSV文件如何解决
问题原因
通过 <input type="file"> 提交的文件不会被纳入普通POST字段集合,因此无法通过 $this->input->post() 方法获取。PHP 会将所有上传文件独立存储在 $_FILES 超全局变量中,CodeIgniter 也提供了专门的上传类处理文件上传逻辑。
解决方案
CodeIgniter 3 版本适配代码
你需要使用 CodeIgniter 内置的上传类获取上传文件,操作步骤如下:
- 先在项目根目录新建
uploads/csv/文件夹,给文件夹设置755读写权限 - 调整控制器
store方法代码:
public function store() { // 普通文本字段正常获取 $y = $this->input->post('name'); print_r($y); // 配置上传参数 $config['upload_path'] = './uploads/csv/'; $config['allowed_types'] = 'csv'; $config['max_size'] = 1024; // 限制文件最大1MB,可自行调整 $this->load->library('upload', $config); // 处理上传逻辑 if (!$this->upload->do_upload('myfile')) { // 打印上传错误信息 $error = $this->upload->display_errors(); print_r($error); } else { // 获取上传后的文件完整路径,可直接传入fopen使用 $upload_data = $this->upload->data(); $csv_file_path = $upload_data['full_path']; print_r($csv_file_path); // 后续读取CSV示例 $handle = fopen($csv_file_path, 'r'); // 可搭配fgetcsv等方法处理文件内容 fclose($handle); } exit; }
CodeIgniter 4 版本适配代码
如果使用CI4,使用请求类的getFile方法获取上传文件即可:
public function store() { // 普通文本字段获取 $y = $this->request->getPost('name'); print_r($y); $myfile = $this->request->getFile('myfile'); if ($myfile->isValid() && !$myfile->hasMoved()) { $save_path = './uploads/csv/'; $csv_file_path = $myfile->move($save_path)->getPathname(); // 后续fopen读取逻辑同上 } exit; }
你当前的表单已经配置了
enctype="multipart/form-data"属性,符合文件上传的要求,不需要修改。
内容的提问来源于stack exchange,提问作者omkar
相关产品推荐
相关产品推荐

