php - getimagesize() vs finfo_file() 用于检测图像类型?

标签 php file-upload

有时图像没有扩展名,但仍然有效。我有一个文件上传表单,需要检测文件类型以将其与我的白名单进行比较。

我知道我不能相信从浏览器发送的 mime 类型,所以从我所做的研究来看,这两个选项似乎是可用的(它们仅在上传文件后有效):

$info      = getimagesize($path);
$imageType = $info['mime'];

$finfo     = finfo_open(FILEINFO_MIME_TYPE);
$imageType = finfo_file($finfo, $path);

从我所做的测试来看,它们看起来都工作得很好,但我想知道是否有任何理由使用其中一种方法而不是另一种方法?

最佳答案

快速查看 php 源代码会发现 getimagesize() 支持以下图像类型:

gif, jpeg, png, swf, psd, bmp, tiff, iff, jpc, jp2, jpx, jb2, xbm, ico

finfo_file 支持更多 mime 类型,如 duskwuff 所说。不利的一面是,它还进行了更多的检查,这使得它的效率有所降低。

我的一个小测试:

$startTime = microtime(true);
for ($i=0; $i<50000; $i++)
    getimagesize("test.png");

echo microtime(true) - $startTime;

$startTime = microtime(true);
for ($i=0; $i<50000; $i++) {
    $finfo     = finfo_open(FILEINFO_MIME_TYPE);
    $imageType = finfo_file($finfo, "test.png");
}

echo '<br>'.(microtime(true) - $startTime);

结果:

0.85886001586914
3.9046602249146

关于php - getimagesize() vs finfo_file() 用于检测图像类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24852830/

相关文章:

Java - 高效处理文件上传并创建新的http请求

javascript - SAPUI5 文件 uploader : Cannot find and append file to FormData()

php - FPDF 将带有背景颜色的文本添加到 x/y 坐标

javascript - 检查输入类型并跳过输入 'password' 字段,同时单击“保存”

php - 是否可以更改已定义常量的值?

php - MySql 限制和偏移给出错误结果

javascript - PHP 中使用 json_encode 将 HTML 字符串置空

Java Http 客户端通过 POST 上传文件

Javascript:将 HTML 上传到 S3

file-upload - 我应该在用户提交表单之前上传选定的文件吗?