Codeigniter文件上传

时间:2011-08-29 20:20:47

标签: php codeigniter upload

您好我正在尝试使用下面的codigniter do_upload函数: 但是得到这个错误:“你没有选择要上传的文件。”我选择了一个文件,当我传递名字时,我可以看到名字,但仍然无法上传...在此先感谢寻求帮助。

function do_upload()
{
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

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

    if ( ! $this->upload->do_upload())
    {
        $data = array('error' => $this->upload->display_errors());
        print_r($data);
        exit;
        //$this->load->view('clients_page', $error);
    }
    else
    {
        $data = array('upload_data' => $this->upload->data());
        print_r($data);
        exit;
    }
}

2 个答案:

答案 0 :(得分:3)

我认为您没有为<input type="file" />默认userfile命名。很高兴看到你的上传视图。

更改此

$this->upload->do_upload()

到这个

$this->upload->do_upload('audioRef')

答案 1 :(得分:2)

  

我选择了一个文件,当我传递名字时,我可以看到名字,但仍然无法上传

这通常是因为您省略了将表单设置为multipart/form-data提交。表单默认为application/x-www-form-urlencoded,不能包含文件上传;在这种情况下,您只需获取文件名。

<form method="post" action="..." enctype="multipart/form-data">

顺便提及,

$config['allowed_types'] = 'gif|jpg|png';

如果你必须使用文件扩展名来检查文件类型(并且这是不可取的,但不幸的是,这是CodeIgniter提供的),请同时允许jpeg和任何其他可能的扩展。

$config['upload_path'] = './uploads/';

如果上传文件夹位于webroot中(您将直接从其中提供文件),那么这可能是一个跨站点脚本漏洞。不幸的是,可以上传看起来像图像但实际上包含HTML的文件,包括<script>

以安全的方式执行用户上传的内容难以。有关背景,请参阅例如this question