- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php通过文件头检测文件类型通用代码类(zip,rar等)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
有时候我们这样做还不完善。可能有些人上存一些文件,但是他通过修改扩展名,让在我们的文件类型之内。 单实际访问时候又不能展示(因为扩展名与文件内容不符)。下面这个php类,可能能够给我们带来帮助。 1、php检测类 首先说明下,上面文件头与文件类型映射关系来自网上,如果你有新的文件需要检查,只需要将映射加入即可。 如果你需要知道文件头信息,可以通过工具:winhex打开标准文件查找。如: 代码: 。
复制代码代码如下
<?php /*通过文件名,获得文件类型* *@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; private function __construct($filename) { self::$_TypeList=$this->getTypeList(); } /** *处理文件类型映射关系表* * * @param string $filename 文件类型 * @return string 文件类型,没有找到返回:other */ private function _getFileType($filename) { $filetype="other"; if(!file_exists($filename)) throw new Exception("no found file!"); $file = @fopen($filename,"rb"); if(!$file) throw new Exception("file refuse!"); $bin = fread($file, 15); //只读15字节 各个不同文件类型,头信息不一样。 fclose($file); $typelist=self::$_TypeList; foreach ($typelist as $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)...) */ 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")); } public static function getFileType($filename) { if(!self::$CheckClass) self::$CheckClass=new self($filename); $class=self::$CheckClass; return $class->_getFileType($filename); } } 。
怎么样获得头字节码: 可以看到:png 文件,头是4个字节(头标记是多少字节需要自己查相关资料确定),对应是:89504E47 如果你对php的pack unpack 不很熟悉,可以查看: php park、unpark、ord 函数使用方法(二进制流接口应用实例) 调用实例: 。
复制代码代码如下
$filename="d:/1.png"; echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n"; $filename="d:/test.doc"; echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n"; d:/1.png png d:/test.doc xls/doc 。
最后此篇关于php通过文件头检测文件类型通用代码类(zip,rar等)的文章就讲到这里了,如果你想了解更多关于php通过文件头检测文件类型通用代码类(zip,rar等)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 .RAR 文件,其中包含同名的不同文件。 例如, index.txt 40 Text Document 04/01/2010 4:40PM index.txt 22 Text Documen
嘿 guyz 我想要 rar(不是 tar)我服务器上的文件夹,使用 php 压缩包 RAR 3.93 Copyright (c) 1993-2010 Alexander Roshal 15 Mar
他们指的是同一件事吗?它们有关系吗? 根据 Oracle,资源适配器存档 (RAR) 是: Resource Adapter Archive (RAR): A RAR file holds a res
灵感来自this answer ,我正在使用: java -jar %BUILDTOOLSPATH%\jill.jar --output classes.jayce src java -jar %BU
有人知道如何比较 archiwum.rar 中的文件数量和文件大小及其在文件夹中提取的内容吗? 我想这样做的原因是,我正在使用的服务器在提取过程中已重新启动几次,我不确定是否所有文件都已正确提取。 .
我正在尝试在 C# WinForms .NET 3.5 中使用 SevenZipSharp 或/和 Unrar 库。我对具有不同命名的多 rar 文件有这个问题,例如: .rar, r01, r02,
我有 7 个扩展名为 xyz.rar.001 - xyz.rar.007 的文件,显然它们是单个文件的一部分。我有所有的 7 个部分。我使用文件连接器将它们加入单个文件 xyz.rar 并尝试使用 W
1) 我有一个名为 CCBuilds 的文件夹,其中包含以下路径中的几个文件:E:\Testing\Builds\CCBuilds . 2) 我已将 C# 代码 (Process.Start) 写入
我想要这个 RAR 组件:http://www.philippewechsler.ch/RARComponent.php 通过菲利普韦克斯勒。 但我不明白我如何才能为存档中的文件而不是存档请求密码?
我正在尝试暴力破解受 3 个字符密码保护的 RAR 压缩文件: import os Alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for a in range(0,
我正在尝试对 rar 存档进行暴力攻击,我需要尽快进行密码检查。我以这种方式从我的程序中调用 rarlab 的“unrar”命令行实用程序: unrar t -p[password] archive.
我想 rar 一个文件夹,但排除某些文件夹和它们下面的所有文件 - .svn 文件夹。 如何使用 rar 控制台命令 (rar.exe) 实现这一点? 最佳答案 你试过-x.svn*吗 关于svn -
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 1年前关闭。 Improve thi
这是我的案例:用户上传包含多个文件的 .rar 文件。 显示.rar文件并可下载。 但是如何在前端实现一个功能,该功能将显示要下载的 .rar 文件以及链接(整个文件),然后也可以显示 .rar 中的
我正在尝试创建一个自解压存档,使用 WinRar 解压到“%USERPROFILE%\Desktop”。但是,当我运行它时,它会解压到 SFX 的当前目录,而不是我的桌面。 提取路径选项是否有效? 我
我尝试从 RAR 加载文件。我正在使用 sFileName=Thread.currentThread().getContextClassLoader().getResource("common.xml
我通过互联网查看了 winrar 的命令行参数是如何工作的,这就是我目前所了解的 void LOCK(string fld, string pw) { Proc
我该怎么做?我见过一个解决方案,因为 ruby 不支持 loookaround 断言,所以不对 ruby 使用单个正则表达式。但是在 C# 中可能吗? [Test] public void R
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我想列出文件夹及其子文件夹中的 .rar 文件,直到没有文件夹为止。 这是我目前使用的代码: private String getFileNums(File file) { if (f
我是一名优秀的程序员,十分优秀!