有时图像没有扩展名,但仍然有效。我有一个文件上传表单,需要检测文件类型以将其与我的白名单进行比较。
我知道我不能相信从浏览器发送的 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/