在PHP中获取文件MIME类型的最佳方法

3

什么是最安全的方法来获取文件的Mime类型?我已经找到了这个:

http://de3.php.net/manual/de/ref.fileinfo.php

但是fileinfo()似乎很容易被操纵。有没有更好的方法来获取文件的mime类型呢? 顺便说一下,我需要处理图像文件。

3个回答

3
这里还有另一种方式。
<?php
$info = getimagesize("image.gif");
$type = $info['mime'];
?>

但是如果您能准确说明“安全”是什么意思以及您所考虑的操作类型,那将会很有帮助。


2

getimagesize()函数返回mime类型

http://php.net/manual/en/function.getimagesize.php
<?php
//png image called gif 
$image = 'temp.gif';
$size = getimagesize($image);

if (isset($size['mime']) && $size[0]>0 && $size[1]>0) {
    echo"Content-type: {$size['mime']}";
    //outputs Content-type: image/png
} else {
     echo"not an image";
}

?>

1

您可以随时自行扫描文件以查找魔术字节等内容。我相信在PECL中有一堆方便的函数,但由于它们在目标主机上的可用性可能会有所不同,因此您可能希望采取困难的方法。例如,请参见此处 -

http://www.garykessler.net/library/file_sigs.html

- 对于文件签名(或魔术字节,或现在称为什么),您知道要接受哪些文件类型,因此只需扫描传入的文件以获取签名集。

另一种选择是允许PHP运行Unix shell并使用file命令以适当的标志测试您的文件,并根据实际文件内容获取真正的MIME类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接