关于php:Codeigniter上传不允许的文件不产生错误

Codeigniter upload unallowed file not producing error

我在使用这个基于 CI 文档中的示例的简单 Codeigniter 图像上传时遇到了问题。

出了什么问题:

1.) 如果上传的文件类型不正确,它不会返回错误。它将我所有的 post 变量设置为 null 并继续处理。

2.) 我能够上传 .sql 和一些(但不是全部).exe 文件,即使允许的文件类型仅限于 jpg、gif 和 png。

因此,拒绝允许的文件类型并不是常见的问题,而是过于宽容,并且没有在应该返回错误时返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    $photo = $this->input->post("photo");

    $config['upload_path'] = './profile_img/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

    $this->load->library('upload', $config);

    if(isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0){  
        if ( ! $this->upload->do_upload('userfile'))
        {
                $error = $this->upload->display_errors();
                $this->session->set_userdata("message", $error);
                header("Location: /page/account");
        }
        else
        {
                $upload_data = $this->upload->data();
                $photo = $upload_data['file_name'];
        }
    }

    $data = array(
        'first_name' => $this->input->post("first_name"),
        'last_name' => $this->input->post("last_name"),
        'username' => $this->input->post("username"),
        'default_meeting_duration' => $this->input->post("default_meeting_duration"),
        'notification_type' => $this->input->post("notification_type"),
        'photo' => $photo
    );

    $this->user_model->update($data, $this->ion_auth->get_user_id());
    $this->session->set_userdata("message","Account Settings Saved");
    header("Location: /page/account");


奇怪的是,解决方案是在错误条件下的第一次重定向之后插入 exit()。

显然,这种行为是这样的,即使发现错误条件,重定向也会被忽略,并且脚本的其余部分会被执行。显然是 CI 中的一个令人费解且难以找到的错误。