PHP はファイル ヘッダーを通じてファイルの種類を検出します (zip、rar など)。

WBOY
リリース: 2016-06-21 08:56:17
オリジナル
1229 人が閲覧しました

場合によっては、これを不完全に行うこともあります。一部のファイルを自分のコンピュータに保存する場合がありますが、そのファイルの種類に該当するように拡張子を変更します。 実際のアクセス時には表示できません(拡張子がファイル内容と一致しないため)。次の 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);
}
}


ヘッダーのバイトコードを取得する方法:

以下を参照してください: png ファイル、ヘッダーは 4 バイトです (ヘッダー マークが何バイトであるかを判断するには、関連情報を確認する必要があります)。対応するのは: 89504E47
PHP のパック アンパックにあまり詳しくない場合は、以下を参照してください:
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





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート