首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在检测mime类型方面,getimagesize()与finfo_file()是完全相同的吗?

在检测mime类型方面,getimagesize()与finfo_file()是完全相同的吗?
EN

Stack Overflow用户
提问于 2015-02-23 01:58:51
回答 2查看 1.6K关注 0票数 2

这些函数是否执行相同的检查来检测文件的mime类型?选择一个而不是另一个有什么好处(例如可靠性/安全性)?

EN

回答 2

Stack Overflow用户

发布于 2015-09-13 01:59:18

它们的用途不同,因此您可以在特定的范围内使用它们。如果我不知道文件的来源,我更喜欢使用finfo来第一次检查文件的可靠性

getimagesize -获取图像的大小

哪个还可以为JPG APP和收集元数据段并假定检测图像mime

finfo_file -返回有关文件的信息

将从文件中获取元信息

您标记为GD的,您只能与图像交互(?)。因此,您可以使用getimagesize(),它似乎返回mime类型的文件,独立于其扩展名,在安全性上是+1,但可能受到PHP支持的图像类型的限制。

我的PHP 5.6.4有:

代码语言:javascript
复制
    [IMAGETYPE_GIF] => 1
    [IMAGETYPE_JPEG] => 2
    [IMAGETYPE_PNG] => 3
    [IMAGETYPE_SWF] => 4
    [IMAGETYPE_PSD] => 5
    [IMAGETYPE_BMP] => 6
    [IMAGETYPE_TIFF_II] => 7
    [IMAGETYPE_TIFF_MM] => 8
    [IMAGETYPE_JPC] => 9
    [IMAGETYPE_JP2] => 10
    [IMAGETYPE_JPX] => 11
    [IMAGETYPE_JB2] => 12
    [IMAGETYPE_SWC] => 13
    [IMAGETYPE_IFF] => 14
    [IMAGETYPE_WBMP] => 15
    [IMAGETYPE_JPEG2000] => 9
    [IMAGETYPE_XBM] => 16
    [IMAGETYPE_ICO] => 17
    [IMAGETYPE_UNKNOWN] => 0
    [IMAGETYPE_COUNT] => 18

O从另一方面来说,我建议你使用finfo来获取文件的真实元信息。

finfo不读取标题以外的其他内容,getimagesize还可以返回一些标记和额外的信息(额外的计算),图像特定的信息。

Lets检查:

具有这个简单的非标准函数:

代码语言:javascript
复制
function displayInfo($path, $info = FILEINFO_MIME_TYPE ) {

        $imageinfo = array();
        $getimagesize = array();

        $finfo = new finfo($info);
        $finfo_mt = $finfo->file($path);

        print_r(getimagesize($path, $imageinfo));
        print_r($imageinfo);
        print_r($finfo_mt);
    }

您可以使用$info=FILEINFO_MIME为读取文件的safe返回类型和编码。所以,

display('file.php');将输出

代码语言:javascript
复制
Array
(
)
text/x-php

display('image.png.hide');display('image.png');将输出

代码语言:javascript
复制
Array
(
    [0] => 31
    [1] => 31
    [2] => 3
    [3] => width="31" height="31"
    [bits] => 8
    [mime] => image/png
)
Array
(
)
image/png

并且,display('image.jpg');将输出

代码语言:javascript
复制
Array
(
    [0] => 206
    [1] => 206
    [2] => 2
    [3] => width="206" height="206"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)
Array
(
    [APP0] => JFIF
    [APP13] => Photoshop 3.08BIMgldeLs_Kr6L1Vvu73FGOs(bFBMD01000ac1030000b1060000ad0b00006f0c0000800d0000fe11000011180000bf180000c8190000ef1a0000d2240000
    [APP2] => [REMOVED UTF CHARS FOR stackoverflow]
)
image/jpeg

希望能在你的问题上有所收获。

票数 2
EN

Stack Overflow用户

发布于 2015-02-23 02:02:45

基本上有两种方法可以找到文件的mime类型……一个是mime_content_type,另一个是文件信息...您可以参考以下urls:

http://php.net/manual/en/function.finfo-file.php

http://php.net/manual/en/function.mime-content-type.php

mime_content_type现在已弃用..文件信息方法是为最新的php版本...文件信息要求在服务器上启用文件信息扩展名...

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28661224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档