设为首页 收藏本站
查看: 787|回复: 0

[经验分享] php获取文件类型

[复制链接]

尚未签到

发表于 2017-3-24 11:37:54 | 显示全部楼层 |阅读模式
文件上传后,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函数获取到的文件类型最详细和准确。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354606-1-1.html 上篇帖子: 常见的PHP开发框架 下篇帖子: PHP分页代码实例分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表