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 28 PHP
PHP 手机归属地查询 api
Feb 08 PHP
PHP开发负载均衡指南
Jul 17 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
微信支付开发交易通知实例
Jul 12 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP getName()函数讲解
Feb 03 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
JS实现复制功能
2017/03/01 Javascript
php 修改密码实现代码
2017/05/24 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python取代netcat过程分析
2018/02/10 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
电厂厂长岗位职责
2014/01/02 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
关于环保的建议书
2014/05/12 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
Python极值整数的边界探讨分析
2021/09/15 Python
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis