如何在CodeIgniter中导入Excel文件并检查文件扩展名?

时间:2014-05-11 06:58:46

标签: php excel codeigniter

我正在尝试在上传目录中上传Excel文件。当我没有检查文件扩展名时它正在运行。但是当我检查文件扩展名时,它始终显示无效文件。

我的代码如下:

function upload_attendance(){
    $config['upload_path'] = './uploads/';
    $this->load->library('upload', $config);
    $allowedExts = array("xls");
    $temp = explode(".",$_FILES["file"]["name"]);
    $extension = end($temp);
    if(($_FILES["file"]["type"]=="file/xls")&&in_array($extension,$allowedExts)){
        if($FILES["file"]["error"]>0){
            $data['msg'] = $this->upload->display_errors();
            $data['sign'] = 'error_box';
            $this->session->set_userdata($data);
                redirect('attendance/add_attendance');;
        }
        else{
            echo "Uploaded.";
        }
    }
    else{
        $data['msg'] = "Invalid file type.Try to upload a valid file.";
        $data['sign'] = 'error_box';
        $this->session->set_userdata($data);
            redirect('attendance/add_attendance');
    }
}

如何在上传之前检查文件扩展名?你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

在这一行

if(($_FILES["file"]["type"]=="file/xls")&&in_array($extension,$allowedExts)){

您正在检查扩展 AND mime类型是否正确,但AFAIK excel MIME不是file/xls - >我不知道你想出了什么。

根据this resource,Excel文件的mime类型应为:

xls   application/vnd.ms-excel
xlt   application/vnd.ms-excel
xla   application/vnd.ms-excel
xlsx  application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xltx  application/vnd.openxmlformats-officedocument.spreadsheetml.template
xlsm  application/vnd.ms-excel.sheet.macroEnabled.12
xltm  application/vnd.ms-excel.template.macroEnabled.12
xlam  application/vnd.ms-excel.addin.macroEnabled.12
xlsb  application/vnd.ms-excel.sheet.binary.macroEnabled.12

可能你只能使用最常用的两个,所以application/vnd.ms-excelapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet(对于> 2007文档)。

这应该有效:

$mimes = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
$allowedExts = ['xls', 'xlsx'];
if (in_array($_FILES['file']['type'], $mimes) && in_array($extension, $allowedExts)) {

答案 1 :(得分:0)

:-) 我知道已经2年了,因为你问了这个问题, 但即使使用最新版本的CodeIgniter mimes.php文件,仍然存在一些问题!

我经历了大量的StackOverFlow Answers和Google搜索,并找到了答案! 如果有人仍然遇到此问题,您应该访问我的以下answer

最诚挚的问候, Randika