PHP实现获取文件mime类型多种方法解析


Posted in PHP onMay 28, 2020

本文实例讲述了php获取文件mime类型的方法。分享给大家供大家参考。具体如下:

1.使用 mime_content_type 方法

string mime_content_type ( string $filename )

Returns the MIME content type for a file as determined by using information from the magic.mime file.

<?php 
$mime_type = mime_content_type('1.jpg'); 
echo $mime_type; // image/jpeg 
?>

但此方法在 php5.3 以上就被废弃了,官方建议使用 fileinfo 方法代替。

2.使用 Fileinfo 方法 (官方推荐)

使用fileinfo需要安装php_fileinfo扩展。

如已安装可以在extension_dir目录下找到php_fileinfo.dll(windows),fileinfo.so(linux)

打开php.ini,把extension=php_fileinfo.dll前的";"去掉,然后重启apache。

<?php 
$fi = new finfo(FILEINFO_MIME_TYPE); 
$mime_type = $fi->file('1.jpg'); 
echo $mime_type; // image/jpeg 
?>

3.使用 image_type_to_mime_type 方法(只能处理图象类型)

使用exif_imagetype方法需要安装php_exif扩展,并需要安装php_mbstring扩展

如已安装可以在extension_dir目录下找到php_exif.dll(windows),exif.so(linux)

打开php.ini,把 extension=php_mbstring.dll, extension=php_exif.dll 前的","去掉,然后重启apache

<?php 
$image = exif_imagetype('1.jpg'); 
$mime_type = image_type_to_mime_type($image); 
echo $mime_type; // image/jpeg 
?>

Tips:如果使用文件名的后缀来判断,因为文件后缀是可以修改的,所以使用文件后缀来判断会不准确。

php获取文件mime类型Fileinfo等方法

前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaWeblog.newMediaObject,该api需要提供文件的mime 类型。php如 何获取文件(图片)的mime 类型呢?最初远方博客使用php mime_content_type()函数,使用开发用的ubuntu server lamp的默认配置测试后完全支持,返回了正确的文件mime type。但是将该API项目移植到Centos 5.2(内核2.6) LAMP环境时,出现了如下错误提示:

Fatal error: Call to undefined function: mime_content_type()

最后查看了最新的php手册发现php mime_content_type()函数已经被废弃,当然官方不推荐使用,而且需要经过适当的php配置后才能使用。因此要获取图片或其他的文件的 MIME类型,Fatal error: Call to undefined function: mime_content_type()错误就有了以下几种解决方案。

mime_content_type()函数判断获取mime类型

如果对已被php 5.3.0废弃的mime_content_type()函数仍然情有独钟,那么可以对php进行配置启用magic_mime扩展。比如Centos下 使用phpinfo()查看php apache配置,查找到mime-magic,如果显示“--without-mime-magic”,则要编译php切换到”with-mime- magic“选 项。mime_content_type()函数还依赖于Apache httpd 的magic文件(mime_magic.magicfile),为了检测文件的MIME类型,必须配置告知magic文件的地址,如'?with- mime-magic=/usr/share/file/magic.mime'。Windows环境下还需要在php.ini中添加:

mime_magic.magicfile = "$PHP_INSTALL_DIRmagic.mime"

其中$PHP_INSTALL_DIR是你的php安装目录。在有些LAMP环境下,这个mime_magic文件不一定存在或可读,还要另外下载。另外 有些虚拟主机为了安全考虑,即使是有with-mime-magic也不一定会返回正确的mime类型,有时候会返回空字符串。因此,就凭 mime_content_type()函数已经被废弃这一项,就不推荐使用该方法获取文件MIME类型了。

php Fileinfo 获取文件MIME类型(finfo_open)

PHP官方推荐mime_content_type()的替代函数是Fileinfo函数。PHP 5.3.0+已经默认支持Fileinfo函数(fileinfo support-enabled),不必进行任何配置即可使用finfo_open()判断获取文件MIME类型。Centos 默认安装的LAMP环境php版本还是PHP5.2.6,低于5.3.0版本则可能出现类似错误提示:PHP Fatal error: Call to undefined function finfo_open() in…。因为之前的php版本,需要加载magic_open类,fileinfo函数属于PECL扩展,启用fileinfo PECL扩展才能检测MIME类型。所以有两种途径使用fileinfo获取文件的MIME类型。

将php版本升级到5.3.0以上。php官方也已经不再维护和更新这个fileinfo pecl扩展包,所以升级是最好的办法。

安装fileinfo pecl扩展,Centos linux 如何安装fileinfo:在Centos下面安装fileinfo命令(rpm):yum install php-pecl-Fileinfo。或使用源码安装编译:

cd /usr/src/down && wget http://pecl.php.net/get/Fileinfo-1.0.4.tgz
tar zxvf Fileinfo-1.0.4.tgz
cd /usr/src/down/Fileinfo-1.0.4 && phpize && ./configure && make && make install

还可以使用网上流传较多的一种方法,Linux通过phpize使用pecl指令来安装fileinfo:

  • 若没有phpize指令,需要先安装。#phpize检测若提示”No command ‘phpize' found”,则需先安装phpize;
  • 下载安装php-devel(php5-dev)的rpm,安装phpize;
  • service httpd restart 或 reboot;
  • 命令 pecl install fileinfo 安装fileinfo扩展。
  • 安装完毕,/usr/lib/php/module目录下多了fileinfo.so文件,/usr/share/file目录下多了magic.mime和magic两个文档
  • 修改php.ini配置:加入 extension=”fileinfo.so”
  • service httpd restart
  • Windows服务器下安装fileinfo相似,php.ini:extension=php_fileinfo.dll

image_type_to_mime_type()获取图片MIME类型

如果我们需要判断MIME类型的文件只有图像文件,那么首先可以使用exif_imagetype()函数获取图像类型常量,再用 image_type_to_mime_type()函数将图像类型常量转换成图片文件的MIME类型。同样php.ini中要配置打开 php_mbstring.dll(Windows需要)和extension=php_exif.dll。phpinfo()“?enable-exif”。首先exif_imagetype返回的是图像类型常量(Imagetype Constants),如IMAGETYPE_GIF、IMAGETYPE_JPEG、IMAGETYPE_PNG等。

<?php 
$image = exif_imagetype("D:farleeinfo.jpg");  //本地路径或远程图片地址均可 IMAGETYPE_GIF// 
$image = exif_imagetype("http://farlee.info/wp-content/images/rss_feedsky.gif"); 
$mime = image_type_to_mime_type($image); 
echo $mime; // 输出image/jpeg 
?>

php上传文件获取MIME类型

如果使用php上传文件,检测上传文件的MIME类型,则可以使用全局变量$_FILES['uploadfile']['type'],由客户端的浏览器检测获取文件MIME类型。

Centos 系统或其他环境下若都不方便获取文件MIME类型的话,还有最后一种绝对可行的方法,就是读取文件名后缀,根据后缀名一一对应文件的MIME类型,具体可以参考php手册上的这条评论。当然这种方法检测到的MIME文件类型不一定是非常准确的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用PHP制作静态网站的模板框架
Oct 09 PHP
php抓即时股票信息
Oct 09 PHP
php intval的测试代码发现问题
Jul 27 PHP
很好用的PHP数据库类
May 27 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
Yii框架视图、视图布局、视图数据块操作示例
Oct 14 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 #PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 #PHP
php与阿里云短信接口接入操作案例分析
May 27 #PHP
PHP开发API接口签名生成及验证操作示例
May 27 #PHP
php+websocket 实现的聊天室功能详解
May 27 #PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 #PHP
PHP code 验证码生成类定义和简单使用示例
May 27 #PHP
You might like
php数组去重实例及分析
2013/11/26 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
PHP 验证登陆类分享
2015/03/13 PHP
浅析PHP开发规范
2018/02/05 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
js 获取扫码枪输入数据的方法
2020/06/10 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
python使用matplotlib画饼状图
2018/09/25 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
《春雨》教学反思
2014/04/24 职场文书
高中生学习计划书
2014/09/15 职场文书
北京英语导游词
2015/02/12 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL