有时图像没有扩展名,但仍然有效。我有一个文件上传表单,需要检测文件类型以将其与我的白名单进行比较。
我知道我不能相信从浏览器发送的 mime 类型,所以从我所做的研究来看,这似乎是两个可用的选项(它们仅在上传文件后才有效):
$info = getimagesize($path);
$imageType = $info['mime'];
Run Code Online (Sandbox Code Playgroud)
和
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$imageType = finfo_file($finfo, $path);
Run Code Online (Sandbox Code Playgroud)
从我所做的测试来看,它们看起来都很好,但我想知道是否有任何理由使用其中一种方法而不是另一种方法?
快速浏览一下 php 源代码就会发现它getimagesize()
支持以下图像类型:
gif, jpeg, png, swf, psd, bmp, tiff, iff, jpc, jp2, jpx, jb2, xbm, ico
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
结果:
0.85886001586914
3.9046602249146
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1180 次 |
最近记录: |