如何在codeigniter中阻止/禁止某些文件类型?

时间:2018-04-23 12:24:54

标签: php ajax codeigniter

我一直试图弄清楚它已经有一段时间了,似乎无法找到任何解决方案。我想允许几乎所有文件类型,不包括codeigniter控制器方法中的一些。这是我的代码:

function checkFileType($ext){
        if(in_array($ext, array('ade','adp','bat','chm','cmd','com','cpl','dll','dmg','exe','hta','ins','isp','jar','js','jse','lib','lnk','mde','msc','msi','msp','mst','nsh','pif','scr','sct','shb','sys','vb','vbe','vbs','vxd','wsc','wsf','wsh')))
            return '';
        else
            return $ext;
    }

/* Upload files */
public function store_files(){
    $data='';
    $userdir = 'uploads/files/'.$this->getCategory().$this->getID();
    $this->load->library('upload');
    if (!file_exists($userdir)) {
        mkdir($userdir, 0777, true);
    }
    $file = $_FILES['userfile']['name'];
    $ext = substr(strrchr($file, '.'), 1);
    $config = array(
        'upload_path'=>$userdir,
        'allowed_types'=>checkFileType($ext),
        'max_width'=>0,
        'max_height'=>0,
        'max_size'=>0,
        'encrypt_name'=>TRUE,
        'file_ext_tolower'=>TRUE,
    );
    $this->upload->initialize($config);
    if ( ! $this->upload->do_upload('userfile')) {
        print_r($this->upload->display_errors());
    } else {
        foreach($this->upload->data() as $key=>$value){
            if($value)
                $data.= '<b>'.$key.'</b> : '.$value.'<br><br>';
        }
        echo $data;
    }
 }

注意:

  • $ext函数中回显store_files()时,它会将正确的扩展名显示为字符串。
  • 我尝试允许除checkFileType()方法中匹配的扩展类型以外的所有扩展类型。
  • 如果我按照(gif|png|pdf|pptx...)的顺序手动指定文件扩展名,它可以正常工作,但我似乎无法使用&#39; *&#39;因为它允许所有文件扩展名,包括我想要阻止的文件扩展名。

0 个答案:

没有答案