- 浏览: 242286 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
thepastsee:
304572183股票交流 欢迎加入
实时股票 -
345161974:
很不错,我第一个接触的CSS卡片布局效果,多谢
css卡片效果
在做web应用时候,通过web扩展名判断上存文件类型,这个是我们常使用的。有时候我们这样做还不完善。可能有些人上存一些文件,但是他通过 修改扩展名,让在我们的文件类型之内。 单实际访问时候又不能展示(因为扩展名与文件内容不符)。下面这个php类,可能能够给我们带来帮助。
一、php检测类
首先说明下,上面文件头与文件类型映射关系来自网上,如果你有新的文件需要检查,只需要将映射加入即可。 如果你需要知道文件头信息,可以通过工具:winhex打开标准文件查找。如:
代码:
01
<?php
02
03
/*通过文件名,获得文件类型*
04
*@author chengmo QQ:8292669*
05
*@copyright <a href="http://www.cnblogs.com/chengmo ">http://www.cnblogs.com/chengmo</a > 2010-10-17
06
*@version 0.1
07
*$filename="d:/1.png";echo cFileTypeCheck::getFileType($filename); 打印:png
08
*/
09
class
cFileTypeCheck
10
{
11
private
static
$_TypeList
=
array
();
12
private
static
$CheckClass
=null;
13
private
function
__construct(
$filename
)
14
{
15
self::
$_TypeList
=
$this
->getTypeList();
16
}
17
18
/**
19
*处理文件类型映射关系表*
20
*
21
* @param string $filename 文件类型
22
* @return string 文件类型,没有找到返回:other
23
*/
24
private
function
_getFileType(
$filename
)
25
{
26
$filetype
=
"other"
;
27
if
(!
file_exists
(
$filename
))
throw
new
Exception(
"no found file!"
);
28
$file
= @
fopen
(
$filename
,
"rb"
);
29
if
(!
$file
)
throw
new
Exception(
"file refuse!"
);
30
$bin
=
fread
(
$file
, 15);
//只读15字节 各个不同文件类型,头信息不一样。
31
fclose(
$file
);
32
33
$typelist
=self::
$_TypeList
;
34
foreach
(
$typelist
as
$v
)
35
{
36
$blen
=
strlen
(pack(
"H*"
,
$v
[0]));
//得到文件头标记字节数
37
$tbin
=
substr
(
$bin
,0,
intval
(
$blen
));
///需要比较文件头长度
38
39
if
(
strtolower
(
$v
[0])==
strtolower
(
array_shift
(unpack(
"H*"
,
$tbin
))))
40
{
41
return
$v
[1];
42
}
43
}
44
return
$filetype
;
45
}
46
47
/**
48
*得到文件头与文件类型映射表*
49
*
50
* @return array array(array('key',value)...)
51
*/
52
public
function
getTypeList()
53
{
54
return
array
(
array
(
"FFD8FFE1"
,
"jpg"
),
55
array
(
"89504E47"
,
"png"
),
56
array
(
"47494638"
,
"gif"
),
57
array
(
"49492A00"
,
"tif"
),
58
array
(
"424D"
,
"bmp"
),
59
array
(
"41433130"
,
"dwg"
),
60
array
(
"38425053"
,
"psd"
),
61
array
(
"7B5C727466"
,
"rtf"
),
62
array
(
"3C3F786D6C"
,
"xml"
),
63
array
(
"68746D6C3E"
,
"html"
),
64
array
(
"44656C69766572792D646174"
,
"eml"
),
65
array
(
"CFAD12FEC5FD746F"
,
"dbx"
),
66
array
(
"2142444E"
,
"pst"
),
67
array
(
"D0CF11E0"
,
"xls/doc"
),
68
array
(
"5374616E64617264204A"
,
"mdb"
),
69
array
(
"FF575043"
,
"wpd"
),
70
array
(
"252150532D41646F6265"
,
"eps/ps"
),
71
array
(
"255044462D312E"
,
"pdf"
),
72
array
(
"E3828596"
,
"pwl"
),
73
array
(
"504B0304"
,
"zip"
),
74
array
(
"52617221"
,
"rar"
),
75
array
(
"57415645"
,
"wav"
),
76
array
(
"41564920"
,
"avi"
),
77
array
(
"2E7261FD"
,
"ram"
),
78
array
(
"2E524D46"
,
"rm"
),
79
array
(
"000001BA"
,
"mpg"
),
80
array
(
"000001B3"
,
"mpg"
),
81
array
(
"6D6F6F76"
,
"mov"
),
82
array
(
"3026B2758E66CF11"
,
"asf"
),
83
array
(
"4D546864"
,
"mid"
));
84
}
85
86
public
static
function
getFileType(
$filename
)
87
{
88
if
(!self::
$CheckClass
) self::
$CheckClass
=
new
self(
$filename
);
89
$class
=self::
$CheckClass
;
90
return
$class
->_getFileType(
$filename
);
91
}
92
}
怎么样获得头字节码:
可以看到: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
发表评论
-
phphphphphphph
2012-03-01 22:27 0回归回归lkjlkjlkjlkjlkjlkjlkj -
php_相对路径_转
2012-03-01 22:07 0<?php $str1 = "/home/i ... -
php_自定义排序 关联数组
2012-03-01 21:11 0<?php //用PHP设计一个函数,对学生英语考试得 ... -
php_讲义
2012-02-29 13:07 0ewrwerwer -
php 禁止危险的函数_转
2012-02-27 12:28 0阿酷影 一些需要禁用的PHP危险函数 ... -
转_phpcan't return a result set in the given context及参数解释
2012-02-13 23:49 1285关键就是两点 defin ... -
php_可以编的表格
2012-01-29 10:42 870虽 -
php_oa
2011-10-20 16:48 679dfsdfsfsf -
jquery_upload
2011-09-12 13:07 697http://fangyong2006.iteye.com/b ... -
php__表单处理
2011-08-21 17:04 839sdfadfadsf -
$_SESSION 无法跨页保存数据
2011-08-21 11:46 931今天可遇到问题 $_SESSION 无法跨页保存数据 原 ... -
php 下载地址
2011-08-13 14:51 781window http://windows.php.n ... -
订单号__14位_转
2011-06-27 23:45 907http://bbs.phpchina.com/thread- ... -
9个免费 php 库_转
2011-06-24 21:17 10329个强大免费的PHP库 & 20 你应该知道的PHP ... -
php_错误解决_sessioin
2011-06-01 16:29 1072写购物车时遇到问题, Fatal error ... -
php面试题_转
2011-05-27 01:25 795kjljk -
jquery_ajax_table_php
2011-05-27 01:04 709jljklkj -
php算法_王伟阳
2011-05-23 13:17 816232342 -
php简历
2011-05-18 00:39 1083kjlkjlkj -
黑夜路人转__
2011-05-13 21:41 797lklk
相关推荐
通过上述知识点,可以得知如何使用文件头信息在PHP中检测文件类型,并且可以实现一个通用的文件类型检测代码类,这个类可以在Web应用中充当安全检查的一个环节,防止恶意文件上传带来的潜在风险。
RAR和ZIP都是常见的压缩格式,但它们在压缩算法、支持的功能以及文件头结构上有所不同。RAR通常提供更好的压缩比,而ZIP则更通用且在各种操作系统中都有内置支持。 描述中提到的“将rar格式转为zip格式”,这通常...
该资源是一个包含企业网站模板的压缩包,名为"3162非常简洁时尚的html5模板5588_企业网站模板PHP整站源码.zip.rar",它使用了HTML5技术并集成了PHP编程语言,适用于创建现代化、简洁且时尚的企业网站。以下是基于这...
在描述中提到的文件压缩功能,是通过 PHP 内置的 ZipArchive 类实现的。ZipArchive 提供了一系列方法来创建、打开、修改和提取 ZIP 文件。例如,`createFromString()` 可以将字符串压缩为 ZIP 文件,`addFile()` ...
4. **tools**:工具类文件夹,可能包含一些通用的辅助函数,如加密解密、日期时间处理等。 5. **index**:网站的主页,可能包含欢迎页面、商品展示、导航栏等元素。 6. **logout.php**:用户登出功能的实现,清除...
在“PHP版本学生管理系统”的压缩包中,包含的“学生管理系统.zip”文件很可能是系统的源代码和相关资源。解压后,我们可以看到项目结构,通常包括以下几个部分: - index.php:主页面,用于用户登录和导航。 - ...
10. **包含文件 (includes)**: 这个文件夹通常包含一些经常被其他文件引用的通用代码片段,如头部和尾部的HTML、CSS链接、JavaScript文件等,有利于代码复用和维护。 11. **链接文件 (雪云网络.url)**: 这可能是一...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
本示例主要讲解如何利用cURL实现这一功能,包括图片、压缩包(RAR和ZIP)以及PDF文件的下载。 1. **基本下载流程** 下载远程文件的核心思路是通过HTTP请求获取文件内容,然后将其保存到本地。以下是一个通用的下载...
8. **includes**:包含文件夹,这里通常存放着被多个页面引用的通用函数库、头部和尾部模板等。 9. **menu**:菜单系统,负责生成网站导航,确保用户能够方便地浏览各个部分。 10. **api**:API接口文件,可能用于...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...