php上传文件类型如何判断?高分求解答

thinklxr 2012-08-22 09:25:34
如何判断上传文件的类型呢?我的意思是不应当靠后缀来判断,后缀其实没什么用。怎样判断上传文件的真实类型。
比如我想上传图片,你把一个 exe ,bat 为后缀的可执行文件改为 jpg,我想在上传前就能识别这个文件的真实类型,
我该怎么做?高分求解答。
...全文
180 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-08-22
  • 打赏
  • 举报
回复
$_FILE['file']['type'] 取得的类型是浏览器判别的结果
同一个文件通过不同的浏览器上传,就可能有不同的结果
zhouzhipen 2012-08-22
  • 打赏
  • 举报
回复
这样伪装有什么关系,只要你的系统不让其有机会执行就可以了。
thinklxr 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
$type = $_FILE['file']['type'];
判断类型是否在你需要的范围中,你限定的类型可以用数组
例如
$array=('xxx','yyy');//xxx yyy为你需要限制的类型
if(!in_array($type,$array))
return false;
[/Quote]
这个能判断伪装的文件吗.我试试吧。
xuzuning 2012-08-22
  • 打赏
  • 举报
回复
php可通过检查文件头了识别文件的类型,也可通过 gd 来识别图片类型

不过“在上传前就能识别这个文件的真实类型”就不是php的事情了
况且浏览器都不能正确判断所有的图片类型
thinklxr 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
参考一下这个,写得很详细http://www.w3school.com.cn/php/php_file_upload.asp
[/Quote]
我从网上找了一些代码:
function check_file_type($filename)
{
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch ($typeCode)
{
case 7790:
$fileType = 'exe';
break;
case 7784:
$fileType = 'midi';
break;
case 8297:
$fileType = 'rar';
break;
case 8075:
$fileType = 'zip';
break;
case 255216:
$fileType = 'jpg';
break;
case 7173:
$fileType = 'gif';
break;
case 6677:
$fileType = 'bmp';
break;
case 13780:
$fileType = 'png';
break;
default:
$fileType = 'unknown: '.$typeCode;
}

//Fix
if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';

return $fileType;
}

用它判断严不严谨
ayzen1988 2012-08-22
  • 打赏
  • 举报
回复
$type = $_FILE['file']['type'];
判断类型是否在你需要的范围中,你限定的类型可以用数组
例如
$array=('xxx','yyy');//xxx yyy为你需要限制的类型
if(!in_array($type,$array))
return false;
圆㺭 2012-08-22
  • 打赏
  • 举报
回复
参考一下这个,写得很详细http://www.w3school.com.cn/php/php_file_upload.asp

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧