强大的php检查文件类型
发布:smiling 来源: PHP粉丝网 添加日期:2013-11-30 09:32:02 浏览:43 评论:0
一个强大的文件类型检测函数,它可以判断你上传的文件是什么类型,利用这个函数使用文件的类型没有办法伪装过去,代码如下:
- * @access public
- * @param string filename 文件名
- * @param string limit_ext_types 允许的文件类型,用|包围的类型如:|gif|txt|
- * @return string
- */<span id="more-472"></span>
- function check_file_type($filename, $limit_ext_types = ''){
- $extname = strtolower(substr($filename, strrpos($filename, '.') + 1));
- if ($limit_ext_types &&
- stristr($limit_ext_types, '|' . $extname . '|') === false){
- return '';
- }
- $str = $format = '';
- $file = @fopen($filename, 'rb');
- if ($file){
- $str = @fread($file, 0x400); // 读取前 1024 个字节
- @fclose($file);
- }
- else{
- $format=$extname;
- }
- if ($format == '' && strlen($str) >= 2 ){
- if (substr($str, 0, 4) == 'MThd' && $extname != 'txt'){
- $format = 'mid';
- }
- elseif (substr($str, 0, 4) == 'RIFF' && $extname == 'wav'){
- $format = 'wav';
- }
- elseif (substr($str ,0, 3) == "xFFxD8xFF"){
- $format = 'jpg';
- }
- elseif (substr($str ,0, 4) == 'GIF8' && $extname != 'txt'){
- $format = 'gif';
- }
- elseif (substr($str ,0, 8) == "x89x50x4Ex47x0Dx0Ax1Ax0A"){
- $format = 'png';
- }
- elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt'){
- $format = 'bmp';
- }
- elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3) == 'FWS')
- && $extname != 'txt'){
- $format = 'swf';
- }
- elseif (substr($str ,0, 4) == "xD0xCFx11xE0"){ // D0CF11E == DOCFILE == Microsoft Office Document
- if (substr($str,0x200,4) == "xECxA5xC1x00"
- || $extname == 'doc'){
- $format = 'doc';
- }
- elseif (substr($str,0x200,2) == "x09x08" || $extname == 'xls'){
- $format = 'xls';
- }
- elseif (substr($str,0x200,4) == "xFDxFFxFFxFF"
- || $extname == 'ppt'){
- $format = 'ppt';
- }
- }
- elseif (substr($str ,0, 4) == "PKx03x04"){
- $format = 'zip';
- }
- elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt'){
- $format = 'rar';
- }
- elseif (substr($str ,0, 4) == "x25PDF"){
- $format = 'pdf';
- }
- elseif (substr($str ,0, 3) == "x30x82x0A"){
- $format = 'cert';
- }
- elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt'){
- $format = 'chm';
- }
- elseif (substr($str ,0, 4) == "x2ERMF"){
- $format = 'rm';
- }
- elseif ($extname == 'sql'){
- $format = 'sql';
- }
- elseif ($extname == 'txt'){
- $format = 'txt';
- }
- }
- if ($limit_ext_types &&
- stristr($limit_ext_types, '|' . $format . '|') === false){
- $format = '';
- }
- return $format;
- }
Tags: php函数 文件类型
相关文章
- ·什么函数能够把文件从一个目录下转移到另外一个目录下?(2013-11-27)
- ·计算一个程序的执行时间的函数(2013-11-27)
- ·强php编码转换函数(2013-11-30)
- ·PHP函数学习之PHP函数点评(2014-01-14)
- ·php函数ob_start()、ob_end_clean()、ob_get_contents()(2014-03-22)
- ·关于php函数isset和empty的一些误解(2014-06-11)
- ·php中使用is_numberic函数注意事项(2014-08-21)
- ·PHP利用str_replace()函数防注入(2014-08-22)
- ·PHP中自带函数过滤sql注入代码分析(2014-08-23)
- ·php中json_encode函数对中文的处理例子(2014-08-27)
- ·php里常用的远程采集函数(2014-08-27)
- ·用php写 ftp文件上传函数教程(2014-09-09)
- ·php mysql_real_escape_string()函数(2014-09-11)
- ·php odbc_connect()函数说明与实例代码(2014-09-11)
- ·PHP Header函数跳转时需要注意的一些问题(2014-09-12)
- ·PHP函数之:sprintf()学习笔记(2014-09-12)

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)