完整代码如下。
/**
* @access public
* @param string filename 文件名
* @param string limit_ext_types 允许的文件类型,用|包围的类型如:|gif|txt|
* @return string
* by http://www.
*/
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;
}
完整代码如下。
//检测文件类型
//by http://www.
function checkFileType($filename){
//文件头
$_typecode = array(
'3780',//PDF
'8075',//.docx,.xlsx,.pptx,.potx,.vsdx,.odt
'208207',//.doc,.xls,.ppt,.vsd,.pot,.wps,.dps,.et
);
$file = fopen($filename, "rb");
//contents = stream_get_contents($file);
//$contents = fread($file, filesize($filename));
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);// C为无符号整数,网上搜到的都是c,为有符号整数,这样会产生负数判断不正常
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
exec("file $filename",$output,$return_var);//用linux系统命令file判断上传文件的类型,主要是判断txt,rtf文件类型
$pattern = '/text,/';//rtf和txt文档用file检测都会被检测为text
$_count = preg_match($pattern,strrchr($output[0],":"));
echo $typeCode;
if(in_array($typeCode,$_typecode) || $_count == 1) {
return true;
}else{
return false;
}
}
?>
php获取文件扩展名/后缀名的代码。
<?php
//取文件后缀名
//by www.
$file_name = ".txt";
echo get_exname($file_name);
/**
* 获取文件扩展名
* @param unknown_type $file_name
* @return $ex_name
*/
function get_exname($file_name)
{
if(empty($file_name))
return false;
$file_name = strtolower()($file_name);
$rev_str = strrev($file_name);
$ex_name_len = strpos($rev_str,'.'); //扩展名的长度
$file_name_len = strlen($file_name);
$ex_name = substr($file_name, $file_name_len - $ex_name_len);
return $ex_name;
}
?>
函数解释:
strtolower() 函数把字符串转换为小写。
strrev() 函数反转字符串。
strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
就是先找到符号'.'的位置,然后计算出扩展名的长度。再用字符串总长度减去扩展名长度来计算出需要截取的长度。
回顾之前,我们介绍过的多个获取文件扩展名的方法:
php 取得文件扩展名的三种方法(改进版)
php 文件扩展名获取方法汇总
php 获取文件扩展名的三个方法
php 获取文件扩展名的5种方法
一个获取文件扩展名的php自定义函数
php获取文件扩展名的几种方法
条条大道均通向幸福的前方,愿您在,可以找到学习路上的灿烂阳光,伴您度过年轻而多彩的人生好时光。