帮看看这个判断上传的文件类型还有哪些地方要修正下..
最近在学到文件上传部分,看视频部分用$_FILES['userfile']['type']来判断,但有些jpg文件就是判断为空,因此搜索了百度,学着改了下用自定义函数写,帮看下可以的吗?还有什么方法判断呀???
<?php
//测试bmp jpg png gif文件类型
$filetest="./testfile/png5.png"; //测试文件
echo $filetest."<br/>" .getFileType($filetest); //测试
/**
* @param string $filename 文件类型
* @return string 文件类型,没有找到返回:other 文件不存在返回:0
*/
function getFileType($filename)
{
$filetype="other";
if(!file_exists($filename)) return 0; //判断文件是否存在;
$file = @fopen($filename,"rb");
if(!$file) return 0;
$bin = fread($file, 10); //只读15字节 各个不同文件类型,头信息不一样。可根据类型修改改其数值.
fclose($file);
$typelist=getTypeList(); //读文件头表
foreach ($typelist as $v)
{
$blen=strlen(pack("H*",$v[0])); //得到文件头标记字节数 4 5 10 12 字节等
$tbin=substr($bin,0,intval($blen)); //文件头
//strtolower — 将字符串转化为小写
$arraybin=unpack("H*",$tbin); //$arraybin 为什么值会在索引1???? $arraybin[0]为空????
if(strtolower($v[0])==strtolower($arraybin[1])) return $v[1];
}
return $filetype;
}
//*** ******************************************************
function getTypeList()
{
return array(array("FFD8","jpg"), //jpg头部2个字节
array("89504E470D0A1A0A","png"), //png头部8个字节,只前4个字节也可,未检测
array("47494638","gif"),//gif 头部6个字节 前3个为标识符,后3个为版本?
array("424D","bmp"),//bmp头部2个字节
);
}
?>
最近在学到文件上传部分,看视频部分用$_FILES['userfile']['type']来判断,但有些jpg文件就是判断为空,因此搜索了百度,学着改了下用自定义函数写,帮看下可以的吗?还有什么方法判断呀???
<?php
//测试bmp jpg png gif文件类型
$filetest="./testfile/png5.png"; //测试文件
echo $filetest."<br/>" .getFileType($filetest); //测试
/**
* @param string $filename 文件类型
* @return string 文件类型,没有找到返回:other 文件不存在返回:0
*/
function getFileType($filename)
{
$filetype="other";
if(!file_exists($filename)) return 0; //判断文件是否存在;
$file = @fopen($filename,"rb");
if(!$file) return 0;
$bin = fread($file, 10); //只读15字节 各个不同文件类型,头信息不一样。可根据类型修改改其数值.
fclose($file);
$typelist=getTypeList(); //读文件头表
foreach ($typelist as $v)
{
$blen=strlen(pack("H*",$v[0])); //得到文件头标记字节数 4 5 10 12 字节等
$tbin=substr($bin,0,intval($blen)); //文件头
//strtolower — 将字符串转化为小写
$arraybin=unpack("H*",$tbin); //$arraybin 为什么值会在索引1???? $arraybin[0]为空????
if(strtolower($v[0])==strtolower($arraybin[1])) return $v[1];
}
return $filetype;
}
//*** ******************************************************
function getTypeList()
{
return array(array("FFD8","jpg"), //jpg头部2个字节
array("89504E470D0A1A0A","png"), //png头部8个字节,只前4个字节也可,未检测
array("47494638","gif"),//gif 头部6个字节 前3个为标识符,后3个为版本?
array("424D","bmp"),//bmp头部2个字节
);
}
?>