标题: 多文件上传类【文件类型严格验证】 [打印本页] 作者: superadmin 时间: 2008-2-21 16:58 标题: 多文件上传类【文件类型严格验证】 某网友的一个多文件上传类,我在原有的基础上对它进行了修改加强,主要是对文件类型判断方面进行了严格判断。
原本的判断方法很简单,很多都可以通过修改扩展名的方法欺骗浏览器进行上传。
这里我加入了通过文件特征码来判别文件类型,可以有效阻止扩展名欺骗。
思路来自hotboe给的一段代码(原帖http://www.phpchina.com/bbs/viewthread.php?tid=51280)
但是通过我实际验证,发现里面好多格式的判别码和位置有问题,于是就自己想办法进行了一些修改。
比如jpg的格式,它的特称码并不像大部分文件一样,在文件的开头两个字节,而是在第7、8、9、10这四个字节
由于时间关系目前只添加了jpg、gif、png三种图片格式的支持,其他格式等需要了再添加吧~
复制PHP内容到剪贴板PHP代码:
/*
多文件上传类
修改:Linvo 2008-2-15
*/
class more_file_upload{
const FILE_PATH='../upfileclass/uploadfile/';
var $file_type;
var $file_type_array;
var $file_type_real_array;
var $file_type_string;
var $file_name;
var $file_size;
var $file_tmp_name;
var $file_error;
var $handledate;
static $totalsize=0;
function show_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize){
if($smfileerror>0){
switch ($smfileerror){
case 1: $smfilemessage='<strong>文件超过服务器的约定大小!</strong>';break;
case 2: $smfilemessage='<strong>文件超过指定的文件大小!</strong>';break;
case 3: $smfilemessage='<strong>文件只上传了部分!</strong>';break;
case 4: echo "$this->file_name ".'文件上传失败!<br/>';break;
}
self::__destruct();
}else{
$smfiletypeflag = array_search($smfiletype,$this->file_type_array);