php获取文件类型

文件上传后,php后台能够在$_FILES超级全局变量中获取到上传文件的各种信息,这里引用一段上传文件的说明:

http://yuweiqiang.blog.163.com/blog/static/6657041201071811832110/ 写道
PHP $_FILES数组内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] c。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)

UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.

使用PHP $_FILES数组对文件上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。

 

这里面针对文件类型,其实是根据文件扩展(windows才有这个概念)名判断的,所以这个可以造假。

比如你可以将一个xxx.cmd的脚本修改为xxx.jpg上传后,$_FILES['myFile']['type'] 的值是image/jpeg;所以如果想要获取文件真实类型,就要舍弃这个信息,转而使用其他方法。

 

获取文件方法参考文章:http://www.cnblogs.com/see7di/archive/2011/07/02/2239691.html 

注意其中mime_content_type被废弃了。

finfo_open我试了试是需要安装扩展;

使用exif_imagetype()函数获取图像类型常量,再用image_type_to_mime_type()函数将图像类型常量转换成图片文件的MIME类型也是需要启用php_mbstring.dll(Windows需要)和extension=php_exif.dll。在linux里有相应的so。

 

我这里给一个参考代码:

 

$image_type = image_type_to_mime_type(exif_imagetype($_FILES["file"]["tmp_name"]));
// 结果是:image/jpeg

 

 如果用finfo函数:

 

$mimetype = finfo_file($finfo, $_FILES["file"]["tmp_name"]);
finfo_close($finfo);
$image_type = image_type_to_mime_type(exif_imagetype($_FILES["file"]["tmp_name"]));
// 结果是:image/jpeg; charset=binary

 

 要注意:image_type函数也可以判断zip包,不过这两个方法获取到的文件类型描述不一样,另外,finfo函数获取到的文件类型最详细和准确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值