ホームページ > バックエンド開発 > PHPチュートリアル > PHP は、ファイル ヘッダーを通じてファイルの種類を検出します (zip、rar など)。

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

WBOY
リリース: 2016-07-29 08:43:52
オリジナル
1214 人が閲覧しました

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


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

:png ファイルを見ることができます。ヘッダーは 4 バイトです (ヘッダー マークのバイト数を決定するには、関連情報を確認する必要があります)。対応するものは: 89504E47 です。
PHP のパック unpack にあまり慣れていない場合は、 , あなたは確認することができます:
php park, unpark, ord関数の使い方(バイナリストリームインターフェース応用例)

呼び出し例:

 php通过文件头检测文件类型通用代码类(zip,rar等
コードをコピー

コードは次のとおりです:

$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 チュートリアルに興味のある友人に役立つことを願っています。

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