場合によっては、これを不完全に行うこともあります。一部のファイルを自分のコンピュータに保存する場合がありますが、そのファイルの種類に該当するように拡張子を変更します。 実際のアクセス時には表示できません(拡張子がファイル内容と一致しないため)。次の php クラスが役立つかもしれません。
1. PHP 検出クラス
まず、ファイル ヘッダーとファイル タイプの間の上記のマッピング関係がインターネットから取得されたものであることを説明します。確認する新しいファイルがある場合は、マッピングを追加するだけです。 ファイルのヘッダー情報を知る必要がある場合は、標準ファイルを開いてツール winhex を使用して検索できます。例:
コード:
コードをコピー コードは次のとおりです:
/*ファイル名からファイルの種類を取得*
*@author chengmo*
*@copyright cnblog .com/chengmo 2010 -10-17
*@バージョン 0.1
*$filename="d:/1.png";echo cFileTypeCheck::getFileType($filename); print: png
*/
class cFileTypeCheck
{
プライベート静的 $_TypeList= array();
プライベート静的 $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("ファイルが見つかりません!"); ($filename," rb");
if(!$file) throw new Exception("file拒否!");
$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(strto lower($v[0]); ==strto lower(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") 、
array("3C3F786D6C","xml")、
array("68746D6C3E","html")、
array("44656C69766572792D646174","eml")、ふ」、 "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"));
}
public static function getFileType($filename)
{
if(!self::$CheckClass) self ::$CheckClass=new self($filename);
$class=self::$CheckClass;
$class->_getFileType($filename);
ヘッダーのバイトコードを取得する方法:
:png ファイルを見ることができます。ヘッダーは 4 バイトです (ヘッダー マークのバイト数を決定するには、関連情報を確認する必要があります)。対応するものは: 89504E47 です。
PHP のパック 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
http://www.bkjia.com/PHPjc/322512.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/322512.html技術記事場合によっては、これを不完全に行うこともあります。一部のファイルを自分のコンピュータに保存する場合がありますが、そのファイルの種類に該当するように拡張子を変更します。 実際の訪問時には表示できません(...)