PHP는 파일 헤더를 통해 파일 유형을 감지합니다(zip, rar 등).

WBOY
풀어 주다: 2016-07-29 08:43:52
원래의
1163명이 탐색했습니다.

때때로 우리는 이것을 불완전하게 수행합니다. 어떤 사람들은 자신의 컴퓨터에 일부 파일을 저장할 수 있지만 파일 형식에 맞게 확장자를 변경합니다. (확장자가 파일 내용과 일치하지 않기 때문에) 실제 접속 중에는 표시할 수 없습니다. 다음 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)
}


헤더 바이트코드를 얻는 방법:



볼 수 있는 내용: png 파일, 헤더는 4바이트입니다(헤더 마크가 몇 바이트인지 확인하려면 관련 정보를 확인해야 합니다). ), 해당 항목은 다음과 같습니다: 89504E47  php通过文件头检测文件类型通用代码类(zip,rar等PHP의 pack unpack에 익숙하지 않은 경우 다음을 확인할 수 있습니다.
php park, unpark, ord 함수 사용 방법(바이너리 스트림 인터페이스 응용 예)
호출 예 :


코드 복사 코드는 다음과 같습니다.

$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의 일반적인 코드 클래스를 소개합니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!