使用finfo_file()函数检测上传图片的类型

简介:

该函数可以检测文件的MIME类型。因为有时候我们只根据文件后缀来判断是不准确的。

function getMIME($filename){
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    return finfo_file($finfo, $filename); 
}

echo getMIME('test.jpg'); //image/jpeg

finfo_file 文档

(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)

finfo_file -- finfo::fileReturn information about a file,This function is used to get information about a file.

完整例子:

<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <head>
        <title>文件上传</title>
    </head>
    <body>
    <form accept="" method="post" enctype="multipart/form-data">
    <input  type="file" name="img[]" /><br />
    <input  type="submit" name="s" /><br />
    </form>
    
<?php

    //上传文件信息
    $img = $_FILES['img'];
    if ($img)
    {
        //文件存放目录,和本php文件同级
        $dir = dirname(__file__);

        $filename = $img['name'][0];
        $tempname = $img['tmp_name'][0];

        $savepath = "$dir\\$filename";
        $state = move_uploaded_file($tempname, $savepath);
        //如果上传成功,预览
        if($state)
        {
            echo "<img src='$filename' alt='$filename' /> ";
        }
        
        $finfo = finfo_open(FILEINFO_MIME_TYPE); 
        //$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename); 
        $mime = finfo_file($finfo, $savepath); 
        echo $mime;

    }
?>
    </body>
</html>

如果是jpg文件,输出image/jpeg。

目录
相关文章
|
存储 人工智能 大数据
云计算平台:AWS、Azure和Google Cloud的比较与选择
在当今数字化时代,云计算平台成为了企业和个人的首选。本文将重点比较三大主流云计算平台:AWS、Azure和Google Cloud,从性能、功能、可用性以及定价等方面进行综合评估,帮助读者更好地选择适合自己需求的云计算平台。
|
定位技术 开发工具 开发者
为了让外卖小哥在地图里开上火箭🚀我用FLutter自定义了地图
花了五天时间,用Flutter自定义地图是什么体验?外卖小哥都开上火箭了?什么?我被女朋友赶出家门啦?欢迎观看被女友赶出家门之开火箭送外卖篇~
|
9月前
|
SQL 存储 监控
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
在业务场景中,日志数据可能存储在日志服务 Project 的不同 Logstore/MetricStore 中或不同地域的 Project 中。日志服务的数据集(StoreView)功能支持跨地域、跨 Store 联合查询和分析,让用户基于数据集就能高效便捷地查询分析全地域的数据,真正做到数据分析不受地域边界的限制。
254 114
|
Linux 数据安全/隐私保护 Windows
更换(Pypi)pip源到国内镜像
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.
247118 2
|
7月前
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
366 4
|
9月前
|
自然语言处理 搜索推荐 数据挖掘
销售易、八百客、用友CRM:行业应用与选型建议
在数字化转型浪潮中,CRM系统成为企业提升销售效率、优化客户体验和增强竞争力的关键工具。本文深度剖析了销售易CRM、八百客CRM和用友CRM,从产品功能和优势特色两方面进行总结。销售易CRM适合大型企业和跨国公司,提供全面的客户管理、销售自动化、营销自动化等功能;八百客CRM以其易用性和移动办公特性,适合中小企业;用友CRM则以综合管理和定制化解决方案见长,适合需要一体化管理的中大型企业。企业应根据自身需求选择最适合的CRM系统,助力数字化转型。
|
存储 NoSQL Redis
Redis介绍以及日常使用
​ 介绍 Redis(REmote DIctionary Server)是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、非关系类型的Key-Value数据库。它提供了多种语言的API,如Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等,使得在各种语言环境下使用Redis都变得非常方便。 Redis是一个高性能的Key-Value数据库,其性能在很大程度上补偿了如Memcached这类Key-Value存储的不足,并且在某些场景下,它还可以作为关系数据库的良好补充。它支持的数据结构类型
319 1
HugeTLB 控制器 【ChatGPT】
HugeTLB 控制器 【ChatGPT】
|
开发者 Python
【Python】已解决:TypeError: a bytes-like object is required, not ‘int’
【Python】已解决:TypeError: a bytes-like object is required, not ‘int’
858 0
|
Java Shell API
实战教程:如何将自己的Python包发布到PyPI上
实战教程:如何将自己的Python包发布到PyPI上
3461 0
实战教程:如何将自己的Python包发布到PyPI上