php判断是否是文件_PHP判断文件是否为图片文件的方法总结
近日在做图片处理方面的开发,看着这一片不错的文章,分享给大家。在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名。仅仅通过文件名是无法判断该文件是否是一个图片文件的。或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的。更何况,在 Linux 系统下是不以后缀来区分文件格式的。如果天真的以为通过后缀名就能区分图片,那可能出现错误时,你连错误在哪儿都不知道。比如有一个讨厌的人把一个文本文件改成 background.jpg,然后给你用,你可能只会简单的认为这个图片被损坏了,万万没想到它竟然仅仅是一个文本文件。
为了避免一些不必要的问题出现,在拿到一个图片时,应该正确的判断该文件是否真的一个图片文件。这里总结了三种判断方法,有需要的朋友们可以一起来看看吧。
方法一:利用getimagesize 函数获取图片信息,然后进行判断<?php # Script -- isimg.php
/* Author @ Huoty
* Date @ 2015-11-24 16:59:26
* Brief @
*/
function isImage($filename)
{
$types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型
if(file_exists($filename))
{
if (($info = @getimagesize($filename))
return 0;
$ext = image_type_to_extension($info['2']);
return stripos($types,$ext);
}
else
{
return false;
}
}
if(isImage('isimg.txt')!==false)
{
echo isImage('1.jpg');
echo '是图片';
}
else
{
echo '不是图片';
}
?>
方法二:读取图片的前 2 个字节,然后判断是不是图片<?php # Script -- isimg2.php
/* Author @ Huoty
* Date @ 2015-11-25 16:42:38
* Brief @
*/
//判断上传的是不是图片
function isImg($fileName)
{
$file = fopen($fileName, "rb");
$bin = fread($file, 2); // 只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/)
{
return $typeCode;
}
else
{
// echo '"仅允许上传jpg/jpeg/gif/png格式的图片!';
return false;
}
}
if (isImg("1.jpg"))
{
echo "是图片";
}
else
{
echo "不是图片";
}
?>
方法三:最后一种方法是利用 exif_imagetype 函数,该函数用于判断一个图像的类型,采用这种方法更加简单。读取一个图像的第一个字节并检查其签名。 如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但该函数要快得多该函数的返回值常量定义如下:
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II(Intel 字节顺序)
8 IMAGETYPE_TIFF_MM(Motorola 字节顺序)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
/* Author @ Huoty
* Date @ 2015-11-25 16:53:04
* Brief @
*/
$mimetype = exif_imagetype("1.jpg");
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP)
{
echo "是图片";
}
?>
以上就是关于PHP判断文件是否为图片的全部内容了,希望本文的内容对大家学习或者使用PHP能有一定的帮助,如果有疑问大家可以留言交流。最后是一段遍历文件的代码<?php
function read_all ($dir){
if(!is_dir($dir)) return false;
$handle = opendir($dir);
if($handle){
while(($fl = readdir($handle)) !== false){
$temp = $dir.DIRECTORY_SEPARATOR.$fl;
//如果不加 $fl!='.' && $fl != '..' 则会造成把$dir的父级目录也读取出来
if(!is_dir($temp) && $fl!='.' && $fl != '..'){
echo '文件:'.$temp.'
';
echo "
";
}
}
}
}
read_all('D:\phpstudy\WWW\table');
php判断是否是文件_PHP判断文件是否为图片文件的方法总结相关推荐
- python显示文件夹图片_python遍列目录搜索文件夹及子文件夹图片文件
自本人从事汽车配件销售工作以为,收集了很多零配件图片,超级多,每次在Window视窗搜索指定名称的图片时很耗时,超级超级的慢,实在受不了了,决定用Sqlite3将所有图片的地址存储,然后用做一个页面来 ...
- 图片文件转base64和base64转图片文件
一.图片文件转base64 function imgFileToBase64(){//$img = 'D:\xampp\git-new\wshifu-apps\service\assets\logo_ ...
- android webview 多文件上传,Android网页WebView图片文件上传的问题
Android网页WebView图片文件上传的问题 发布时间:2020-07-13 22:48:15 来源:51CTO 阅读:5922 作者:拾荒者老大 在安卓下,webview上传图片点击是没用的, ...
- php中如何判断目录是否存在文件_PHP判断指定目录下是否存在文件
这篇文章介绍的内容是关于PHP判断指定目录下是否存在文件 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下/* 功能:判断某个目录下是否存在文件: 参数:$path -- 要进行判断的目 ...
- php 判断当前手机类型_PHP 判断当前访问设备是电脑还是手机
PHP 判断当前访问设备是电脑还是手机 2020年07月28日 | 萬仟网IT编程 | 我要评论 function is_mobile(){ $regex_match="/(nokia|ip ...
- php 判断来源 微信客户端_PHP判断手机端、PC端 、微信代码实例
欢迎大家关注我的其他Github博客和CSDN博客,互相交流! 在这里博主为大家分享了PHP判断的两个实例,一是PHP判断是手机端还是PC端,二是PHP判断是否是微信浏览器,供大家参考,具体内容如下 ...
- php判断小数点的长度_PHP 判断字符串是否为整数、数字、不含小数点
PHP 用正则表达式判断字符串是否为整数,若字符串未定义.未赋值.或者带有小数点验证均会提示不是整数 $Number="1"; if(preg_match("/^-?\d ...
- php防止文件盗链,PHP如何禁止图片文件的被盗链
1.假设充许连结图片的主机域名为:www.test.com 2.修改httpd.conf SetEnvIfNoCase Referer "^http://www.test.com/" ...
- 利用Python对文件进行批量重命名——以图片文件为例
效果如下:0001号用户的第 i 张图片 代码: import osclass ImageRename():def __init__(self):self.path = 'C:/Users/lbpen ...
最新文章
- python内置库之学习ctypes库(三)--调用Win32API
- Python字符编码详解
- SimpleDateFormat线程不安全
- 关于ipconfig中setclassid的初步认识
- Ruby常用比较操作符
- why some product does not have Note assignment block
- 使用ABAP事务码STAD分析Asynchronous RFC call性能
- 数据库范式(1NF 2NF 3NF BCNF)详解
- 前端学习(1898)vue之电商管理系统电商系统之渲染用户的对话框
- ContentProvider和Uri详解
- 移动端 html5领奖页面,HTML5移动端交互
- Linux MySQL主主复制(Replication)(MySQL数据双向同步)配置
- spring cloud gateway 之限流篇
- 【数据库】MySql分割字符串
- STM32 易阅读的代码风格
- C语言程序——小数的四舍五入
- android 高德地图 logo,Android高德之旅(3)UI Setting
- 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
- 网站优化关键词密度多少才是最合适的?
- 关于阻容耦合电路及阻容耦合分压
热门文章
- ABP Framework:移除 EF Core Migrations 项目,统一数据上下文
- C sharp实例:华盾武器门数据接收和解析
- C# this关键字的3种用法
- WPF使用Animation仿WeChat(微信)播放语音消息
- 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
- .NET 5 自身就是一个 .NET Standard
- 跟我一起学.NetCore之依赖注入
- 给 ABP vNext 应用安装私信模块
- 一文读懂 Copyleft 开源许可证
- 不要错过这轮疫情的“洗牌”机会