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数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
php如何实现只替换一次或N次
Oct 29 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
php自动加载代码实例详解
Feb 26 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中TP5 上传文件的实例详解
2017/07/31 PHP
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python 美化输出信息的实例
2018/10/15 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Python自省及反射原理实例详解
2020/07/06 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
门卫岗位安全职责
2013/12/13 职场文书
初中地理教学反思
2014/01/11 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
公司请假条范文
2014/04/11 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
Python first-order-model实现让照片动起来
2022/06/25 Python