我一直试图弄清楚它已经有一段时间了,似乎无法找到任何解决方案。我想允许几乎所有文件类型,不包括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;因为它允许所有文件扩展名,包括我想要阻止的文件扩展名。