場合によっては、これを不完全に行うこともあります。一部のファイルを自分のコンピュータに保存する場合がありますが、そのファイルの種類に該当するように拡張子を変更します。 実際のアクセス時には表示できません(拡張子がファイル内容と一致しないため)。次の 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 file type
* @return string ファイルタイプ、見つかりません return: other
*/
プライベート関数 _getFileType($filename)
{
$filetype="other";
if(!file_exists($filename)) throw new Exception("ファイルが見つかりません!") ;
$file = @fopen($filename,"rb");
if(!$file) throw new Exception("ファイル拒否!"); ); // 15 バイトのみ読み取ります。ファイルの種類が異なると、ヘッダー情報も異なります。
fclose($file);
$typelist=self::$_TypeList;
foreach ($typelist as $v)
{
$blen=strlen(pack("H*" ,$v[0])); //ファイルヘッダーでマークされたバイト数を取得します
$tbin=substr($bin,0,intval($blen)); ///ファイルヘッダーを比較する必要がありますlength
if (strto lower($v[0])==strto lower(array_shift(unpack("H*",$tbin))))
{
return $v[1]; }
}
return $filetype;
}
/**
*ファイルヘッダーとファイルタイプのマッピングテーブルを取得*
*
* @return array array(array("key",value)...)
*/
public function 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")、
array("3C3F786D6C","xml")、
array("68746D6C3E","html")、
array("44656C69766572792D646174","eml")、
array ("CFAD12FEC5FD746F", "dbx")、
array("2142444E","pst")、
array("D0CF11E0","xls/doc")、
array("5374616E64617264204A"," mdb")、
array("FF575043","wpd")、
array("252150532D41646F6265","eps/ps")、
array("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")、
array("000001B3","mpg")、
array("6D6F6F76","mov")、
array("3026B2758E66CF11","asf") ),
array("4D546864","mid"));
}
パブリック静的関数 getFileType($filename)
{
if(!self::$CheckClass) self: :$CheckClass=新しい 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