在PHP中获取照片文件扩展名类型的最佳方法

Jas*_*vis 3 php

我正在我的网站上重新构建我的照片上传部分,我正尽力学习,所以我可以安全地做到这一点,但也有最好的表现.我的网站通常每分钟上传15-20张照片

那么这种方法对于获取照片的文件类型是否可靠,如jpg,gif,png?

 $fileType = $_FILES['image']['type'];
Run Code Online (Sandbox Code Playgroud)

jas*_*son 13

文件扩展名是或至少可以.绝对不要依赖/信任用户提交的数据.另外,正如PHP手册所述:

$ _FILES ['userfile'] ['type'] - 如果浏览器提供此信息,则为文件的mime类型.一个例子是"image/gif".但是,在PHP端没有检查这个mime类型,因此不会将其值视为理所当然.

这不可靠.

这是一个更好的方法:

PHP的getimagesize()函数返回有关图像的数字索引数据数组,索引2是指示图像类型的IMAGETYPE_XXX常量之一(此处有完整列表).然后可以将它们用于许多GD族函数中,两个相关的函数是image_type_to_extension()image_type_to_mime_type().

所以,你可以轻松地沿着这些方向做点什么:

$imageData = getimagesize($_FILES['userfile']['tmp_name']);
// $imageData[2] will contain the value of one of the constants
$mimeType = image_type_to_mime_type($imageData[2]);
$extension = image_type_to_extension($imageData[2]);
Run Code Online (Sandbox Code Playgroud)

虽然,如果您有exif可用的扩展名,该[exif_imagetype()][5]函数将返回与索引2完全相同的结果,getimagesize()但速度要快得多.

我使用GD方法作为我的主要示例,因为它们更常见于PHP安装中.但是Imagick扩展也提供了类似的功能,你也可以用fileinfo扩展来验证mime类型(包括自5.3以后,btw).