때때로 우리는 이것을 불완전하게 수행합니다. 어떤 사람들은 자신의 컴퓨터에 일부 파일을 저장할 수 있지만 파일 형식에 맞게 확장자를 변경합니다. (확장자가 파일 내용과 일치하지 않기 때문에) 실제 접속 중에는 표시할 수 없습니다. 다음 PHP 클래스가 우리에게 도움이 될 수 있습니다.
1. PHP 감지 클래스
먼저 위의 파일 헤더와 파일 형식 간의 매핑 관계는 인터넷에서 가져온 것임을 설명하겠습니다. 확인할 새 파일이 있는 경우 매핑만 추가하면 됩니다. 파일 헤더 정보를 알아야 하는 경우 winhex 도구를 통해 표준 파일 검색을 열 수 있습니다. 예:
코드:
코드 복사 코드는 다음과 같습니다.
/*파일 이름을 통해 파일 형식 가져오기*
*@author chengmo*
*@copyright cnblog.com/chengmo 2010-10-17
*@version 0.1
*$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 문자열 파일 형식, 찾을 수 없음 반환: 기타
*/
비공개 함수 _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"),
array("424D ","bmp"),
array("41433130","dwg"),
array("38425053","psd"),
array("7B5C727466"," rtf"),
배열("3C3F786D6C","xml"),
배열("68746D6C3E","html"),
배열("44656C69766572792D646174","eml"),
배열 ("CFAD12FEC5FD746F", "dbx"),
배열("2142444E","pst"),
배열("D0CF11E0","xls/doc"),
배열("5374616E64617264204A"," mdb"),
배열("FF575043","wpd"),
배열("252150532D41646F6265","eps/ps"),
배열("255044462D312E","pdf"),
array("E3828596 ","pwl"),
array("504B0304","zip"),
array("52617221","rar"),
array("57415645"," wav"),
array("41564920","avi"),
array("2E7261FD","ram"),
array("2E524D46","rm"),
array ("000001BA", "mpg"),
배열("000001B3","mpg"),
배열("6D6F6F76","mov"),
배열("3026B2758E66CF11","asf" ),
array("4D546864","mid"));
}
공용 정적 함수 getFileType($filename)
{
if(!self::$CheckClass) self: :$CheckClass=new self($filename);
$class=self::$CheckClass
return $class->_getFileType($filename)
}
헤더 바이트코드를 얻는 방법:
코드 복사 코드는 다음과 같습니다.
$filename="d:/1.png"echo $filename,"t",cFileTypeCheck::getFileType ($filename),"rn"
$filename="d:/test.doc"
echo $filename,"t",cFileTypeCheck: :getFileType($filename),"rn";
d:/1.png png
d:/test.doc xls/doc
위 내용은 내용의 측면을 포함하여 파일 헤더(zip, rar 등)를 통해 파일 유형을 감지하는 PHP의 일반적인 코드 클래스를 소개합니다.