PHP 检查文件是否为图像
2022-08-30 09:05:42
有没有办法确保收到的文件是?PHP
测试扩展程序对我来说听起来不是很安全,因为您可以上传一个并将其扩展名更改为您想要的任何内容。script
我也尝试过使用,但可能有更适合该特定问题的东西。getimagesize
有没有办法确保收到的文件是?PHP
测试扩展程序对我来说听起来不是很安全,因为您可以上传一个并将其扩展名更改为您想要的任何内容。script
我也尝试过使用,但可能有更适合该特定问题的东西。getimagesize
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)
获取 mimetype 的本机方法:
对于 PHP < 5.3 使用 mime_content_type()
对于 PHP >= 5.3,请使用 finfo_open() 或 mime_content_type()
获取 MimeType 的替代方法是exif_imagetype和 getimagesize,但这些依赖于安装适当的库。此外,它们可能只会返回图像哑剧类型,而不是 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;
}