-
-
//파일 유형 감지 - function checkFileType($fileName){
- $file = fopen($fileName, "rb");
- $bin = fread($file, 2); //2바이트만 읽기
- fclose($file)
- // C는 부호 없는 정수입니다. 인터넷에서 발견되는 모든 것은 부호 있는 정수인 c이며, 이로 인해 비정상적인 음수 판단이 발생합니다.
- $strInfo = @unpack("C2chars", $bin)
- $typeCode = intval($strInfo[' chars1'].$strInfo['chars2']);
- $fileType = ''
스위치( $typeCode )
- {
- 케이스 '255216' :
- return $typeCode.' : ' .'jpg';
- break;
- case '7173':
- return $typeCode.' : ' .'gif';
- break;
- 케이스 '13780':
- $typeCode.' : ' .'png';
- break;
- 케이스 '6677':
- $typeCode.' : ' .'bmp';
- break;
- case '7790':
- return $typeCode. ' : ' .'exe';
- break;
- case '7784':
- return $typeCode ': ' .'midi';
- break;
- case '8297':
- $typeCode를 반환합니다. ' : ' .'rar';
- break;
- 기본값:
- $typeCode를 반환합니다. . ' : ' .'알 수 없음';
- break;
- }
- //return $typeCode;
- }
$file_name = '11.doc ';
- echo checkFileType($file_name);
- ?>
-
코드 복사
2.PHP 파일 헤더 정보를 기반으로 파일 형식을 확인하는 클래스입니다.
-
-
/*파일 이름을 통해 파일 형식 가져오기* - *$filename="d: / 1.png"; echo cFileTypeCheck::getFileType($filename); 인쇄: png
- */
- class cFileTypeCheck
- {
- private static $_TypeList=array();
- private static $ CheckClass=null;
- 비공개 함수 __construct($filename)
- {
- self::$_TypeList=$this->getTypeList();
- }
-
- /**
- *프로세스 파일 형식 매핑 관계 테이블*
- *
- * @param string $filename 파일 형식
- * @return string 파일 형식, 찾을 수 없음 return: other
- */
- 비공개 함수 _getFileType($filename)
- {
- $filetype="other";
- if(!file_exists($filename)) throw new Exception("파일을 찾을 수 없습니다! " );
- $file = @fopen($filename,"rb");
- if(!$file) throw new Exception("파일 거부!");
- $bin = fread($file , 15); //15바이트만 읽습니다. 파일 유형에 따라 헤더 정보가 다릅니다.
- fclose($file);
-
- $typelist=self::$_TypeList;
- foreach($typelist를 $v로)
- {
- $blen=strlen(pack(" H*",$v[0])); //파일 헤더에 표시된 바이트 수를 가져옵니다
- $tbin=substr($bin,0,intval($blen)); ///비교 필요 파일 헤더 길이
-
- if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin))))
- {
- return $v[ 1];
- }
- }
- return $filetype;
- }
-
- /**
- *파일 헤더 및 파일 형식 매핑 테이블 가져오기*
- *
- * @return array array(array('key',value)...)
- */
- 공용 함수 getTypeList()
- {
- return array(array ("FFD8FFE1","jpg"),
- array("89504E47","png"),
- array("47494638","gif"),
- array("49492A00 ","tif" ),
- 배열("424D","bmp"),
- 배열("41433130","dwg"),
- 배열("38425053","psd"),
- 배열(" 7B5C727466","rtf"),
- 배열("3C3F786D6C","xml"),
- 배열("68746D6C3E","html"),
- 배열("44656C69766572792D646174", "eml"),
- 배열("CFAD12FEC5FD746F","dbx"),
- 배열("2142444E","pst"),
- 배열("D0CF11E0","xls/doc"),
- 배열(" 5374616E64617264204A","mdb"),
- 배열("FF575043","wpd"),
- 배열("252150532D41646F6265","eps/ps"),
- 배열("255044462D31 2E ","pdf" ),
- array("E3828596","pwl"),
- array("504B0304","zip"),
- array("52617221","rar"),
- 배열(" 57415645","wav"),
- 배열("41564920","avi"),
- 배열("2E7261FD","ram"),
- 배열("2E524D46", "rm"),
- 배열("000001BA","mpg"),
- 배열("000001B3","mpg"),
- 배열("6D6F6F76","mov"),
- array("3026B2758E66CF11" ,"asf"),
- array("4D546864","mid"));
- }
-
- 공개 정적 함수 getFileType($filename)
- {
- if(!self ::$CheckClass) self::$CheckClass=new self($filename);
- $class=self::$CheckClass;
- return $class->_getFileType($filename);
- }
- }
$filename="22.jpg";
- echo $filename,"t",cFileTypeCheck::getFileType($filename)," rn";
- $filename="11.doc";
- echo $filename,"t",cFileTypeCheck::getFileType($filename),"rn";
$filename = '22.jpg'; - $extname = strtolower(substr($filename, strrpos($filename, '.') 1));
- echo $ extname.'< br />';
- $file = @fopen($filename, 'rb');
- if ($file)
- {
- $str = @fread($ file, 0x400); // 처음 1024바이트 읽기
- echo substr($str, 0, 4);
- @fclose($file);
- }
- if (substr($str, 0, 4 ) == 'MThd' && $extname != 'txt')
- {
- $format = 'mid';
- }
- elseif (substr($str, 0, 4) == ' RIFF' && $extname == 'wav')
- {
- $format = 'wav';
- }
- elseif (substr($str ,0, 3) == "/ xFF/xD8 /xFF")
- {
- $format = 'jpg';
- }
- elseif (substr($str ,0, 4) == 'GIF8' && $extname != ' txt')
- {
- $format = 'gif';
- }
- elseif (substr($str ,0, 8) == "/x89/x50/x4E/x47/x0D/x0A /x1A/ x0A")
- {
- $format = 'png';
- }
- elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt ')
- {
- $format = 'bmp';
- }
- elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3 ) == 'FWS') && $extname != 'txt')
- {
- $format = 'swf';
- }
- elseif (substr($str ,0, 4) == "/xD0 /xCF/x11/xE0")
- { // D0CF11E == DOCFILE == Microsoft Office 문서
- if (substr($str,0x200,4) == "/xEC/xA5/xC1/ x00" | | $extname == 'doc')
- {
- $format = 'doc';
- }
- elseif (substr($str,0x200,2) == "/x09/ x08" | | $extname == 'xls')
- {
- $format = 'xls';
- }elseif (substr($str,0x200,4) == "/xFD/xFF/xFF/xFF" || $extname == 'ppt')
- {
- $format = 'ppt';
- }
- } elseif (substr($str ,0, 4) == "PK/x03/x04")
- {
- $format = 'zip';
- } elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt')
- {
- $format = 'rar';
- } elseif (substr($str ,0, 4) = = "/x25PDF")
- {
- $format = 'pdf';
- } elseif (substr($str ,0, 3) == "/x30/x82/x0A")
- {
- $format = 'cert';
- } elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt')
- {
- $format = ' chm';
- } elseif (substr($str ,0, 4) == "/x2ERMF")
- {
- $format = 'rm';
- } elseif ($extname == ' sql')
- {
- $format = 'sql';
- } elseif ($extname == 'txt')
- {
- $format = 'txt';
- }
-
- echo $format;
- ?>
-
复代码
|