PHP判断图片格式的七种方法小结


Posted in PHP onJune 03, 2013

使用php判断文件图片的格式

<?php 
$imgurl = "https://3water.com/images/logo.gif"; 
//方法1 
echo $ext = strrchr($imgurl,'.'); 
echo '<hr>'; 
//方法2 
echo $ext1 = substr($imgurl,strrpos($imgurl, '.')); 
echo '<hr>'; 
//方法3 
echo(@end(explode(".",$imgurl))); 
echo '<hr>'; 
//方法4 
echo pathinfo($imgurl,PATHINFO_EXTENSION); 
print_r(pathinfo($imgurl)); 
echo '<hr>'; 
//方法5 
$imginfo= getimagesize($imgurl); 
print_r($imginfo); 
echo end($imginfo); 
echo '<hr>'; 
//方法6 
$imghttp = get_headers($imgurl,true); 
print_r($imghttp); 
echo '<hr>'; 
//方法7 
echo exif_imagetype($imgurl);

测试结果:

PHP判断图片格式的七种方法小结

方法分析:

第一种思想方法就是把图片路径当作字符串来处理,那么判断图片格式的也就是变成了查找.号的字符串。

方法1:使用strrchr
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

如果成失败,否则返回 false。备注:该函数是二进制安全的。

方法2:strrpos
strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置。

如果成功,则返回位置,否则返回 false。

注释:该函数对大小写敏感。如需进行大小写不敏感的查找,请使用 strripos()。

先计算.号的位置,在使用substr截取字符串

方法3:explode把字符串分割成数组,取数组最后一个键值
———————————————————————?

第二种思想,把图片路径当作文件路径,那么这里就需要gd类库函数或者php文件函数

方法4:使用pathinfo()
pathinfo(path,options)函数以数组的形式返回文件路径的信息

包括以下的数组元素:

[dirname]
[basename]
[extension]
options参数:

可选。规定要返回的数组元素。默认是 all。

可能的值:

PATHINFO_DIRNAME ? 只返回 dirname
PATHINFO_BASENAME ? 只返回 basename
PATHINFO_EXTENSION ? 只返回 extension
方式5:getimagesize获取图片大小格式的方式,这个不是gd类库函数
这个方法很经典,不仅可以用来判断图片格式还可以获得图片长宽信息

方法6:get_headers获取http报头信息
如果图片路径是一个标准的url路径,那么可以使用get_header函数,这个函数可以返回http报

头,另外这个方法也可以判断图片文件url是否是一个有效的url,使用方法参考:《PHP判断远程url是否有效的几种方法》

方法7:使用gd类库函数
exif_imagetype() 读取一个图像的第一个字节并检查其签名。

如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但本函数快得多。

返回的常量值:对应的值,如例子返回1,对应的是gif格式图片。

PHP判断图片格式的七种方法小结

综合评价
目前比较主流使用的方法是方法1,如果考虑安全问题的话可以使用方法5,因为方法5可以判断这个文件是否为图像文件(可以避免有人把非法程序伪造成图片文件).

PHP 相关文章推荐
PHP COOKIE设置为浏览器进程
Jun 21 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php计算税后工资的方法
Jul 28 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
分析php://output和php://stdout的区别
May 06 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
基于session_unset与session_destroy的区别详解
Jun 03 #PHP
PHP批量采集下载美女图片的实现代码
Jun 03 #PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 #PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 #PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 #PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 #PHP
PHP CLI模式下的多进程应用分析
Jun 03 #PHP
You might like
php里array_work用法实例分析
2015/07/13 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
机电一体化大学生求职信
2013/11/08 职场文书
英语专业应届生求职信范文
2013/11/15 职场文书
心理健康心得体会
2014/01/02 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
班级心理活动总结
2014/07/04 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
消费者投诉书范文
2015/07/02 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Python面试不修改数组找出重复的数字
2022/05/20 Python