PHP 识别文件真实类型,公共方法类。
1、产生原因:前几天服务器的上传图片的文件公共方法被人家上传了一些木马文件,有些文件的真实后缀被改变了所以判断不了
2、网上找了一个判断文件真实类型的方法
<?php
ini_set('display_errors',1); //错误信息
ini_set('display_startup_errors',1); //php启动错误信息
error_reporting(-1); //打印出所有的 错误信息
ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到一个文本文件
//服务器文件相对路径
$file = "./Avatar/2019-08-11/f7c192bc505a9228e53735ea173b3b64"; //结果php
$file = "./Avatar/2019-08-11/20190811235350.php"; //结果php
$file = "./Avatar/2019-08-11/20181207123546.jpeg"; //结果jpg
$file = "./Avatar/2019-08-11/20181207123546"; //结果jpg
//获取绝对路径
$q_file = realpath($file);
$re = getFileType($q_file);
var_dump($re);
function getFileType($file){
$fp = fopen($file, "rb");
$bin = fread($fp, 2); //只读2字节
fclose($fp);
$str_info = @unpack("C2chars", $bin);
$type_code = intval($str_info['chars1'].$str_info['chars2']);
$file_type = '';
switch ($type_code) {
case 6063:
$file_type = 'php';
break;
case 7790:
$file_type = 'exe';
break;
case 7784:
$file_type = 'midi';
break;
case 8075:
$file_type = 'zip';
break;
case 8297:
$file_type = 'rar';
break;
case 255216:
$file_type = 'jpg';
break;
case 7173:
$file_type = 'gif';
break;
case 6677:
$file_type = 'bmp';
break;
case 13780:
$file_type = 'png';
break;
default:
$file_type = 'unknown';
break;
}
$of['code'] = $type_code;
$of['type'] = $file_type;
return $of;
}
?>
测试一下:1
这个是一个php木马文件
测试2:
这是一个带后缀的php文件
测试三:识别两个图片文件
可以很好用。
提示:自己相加其他类型的判断自己可以去先获取然后加在判断里
天下皆白_唯我独黑: 老电脑就这样了,一段时间又不准了,这个只能校准时间不能保证一直正确
m0_57953615: 没过一会儿又自己变回错误时间了…
m0_57953615: 牛 只有这个成功了!
天下皆白_唯我独黑: 是容易卡住的有些资源是外网的,正常应该2个小时内就完成了
2401_82931593: 感谢 试了很多 这个终于成功了