PHP 检查文件是否为图像

2022-08-30 09:05:42

有没有办法确保收到的文件是?PHP

测试扩展程序对我来说听起来不是很安全,因为您可以上传一个并将其扩展名更改为您想要的任何内容。script

我也尝试过使用,但可能有更适合该特定问题的东西。getimagesize


答案 1

getimagesize() 应该是确定文件是否为图像的最明确方法:

if(@is_array(getimagesize($mediapath))){
    $image = true;
} else {
    $image = false;
}

因为这是一个示例 getimagesize() 输出:

Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)

答案 2

获取 mimetype 的本机方法:

对于 PHP < 5.3 使用 mime_content_type()
对于 PHP >= 5.3,请使用 finfo_open()mime_content_type()

获取 MimeType 的替代方法是exif_imagetypegetimagesize,但这些依赖于安装适当的库。此外,它们可能只会返回图像哑剧类型,而不是 magic.mime 中给出的整个列表。

虽然可以从 PHP 4.3 获得,并且是 FileInfo 扩展的一部分(自 PHP 5.3 起默认启用,但 Windows 平台除外,其中必须手动启用,有关详细信息,请参阅此处)。mime_content_type

如果您不想为系统上可用的功能而烦恼,只需将所有四个函数包装成一个代理方法,该代理方法将函数调用委托给任何可用的函数,例如

function getMimeType($filename)
{
    $mimetype = false;
    if(function_exists('finfo_open')) {
        // open with FileInfo
    } elseif(function_exists('getimagesize')) {
        // open with GD
    } elseif(function_exists('exif_imagetype')) {
       // open with EXIF
    } elseif(function_exists('mime_content_type')) {
       $mimetype = mime_content_type($filename);
    }
    return $mimetype;
}

推荐