PHP检查文件是否是一个图像[复制](PHP check if file is an image [

2019-07-21 14:27发布

这个问题已经在这里有一个答案:

  • 如何在PHP中检查上传的文件类型 8个回答

有没有一种办法,以确保接收的文件是在图像PHP

测试的扩展听起来不很安全的把我当成你可以上传script和扩展名更改为任何你想要的。

我试着用getimagesize过,但有可能是一个更适合于特定的问题。

Answer 1:

本机的方式来获得MIME类型:

对于PHP <5.3使用mime_content_type()
为PHP> = 5.3使用finfo_open()或mime_content_type()

替代方案,以获得Mime类型是exif_imagetype和和getimagesize ,但这些依赖于具有安装相应的库。 此外,他们可能会只返回图像MIME类型,而不是给整个列表magic.mime 。

虽然mime_content_type可从PHP 4.3,是FileInfo的扩展(默认情况下,因为PHP 5.3启用,除了Windows平台,它必须手动启用,详见部分在这里 )。

如果你不希望打扰一下什么是你的系统上,只是包装全部四个功能集成到一个代理方法委托函数调用一切可用,如

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;
}


Answer 2:

和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)


Answer 3:

使用文件扩展名getimagesize函数来检测,如果上传的文件有正确的格式只是入门级检查,它可以简单地通过上传与真正的延伸和图像头,但错误的内容的一些字节的文件绕过。

为是安全可靠的,你可以让缩略图/调整(即使是原始图像大小)上传的图片,并保存此版本而不是上传一个。 也是其可能得到上传的文件内容和搜索它像特殊字符<?php要查找的文件是图像还是不行。



文章来源: PHP check if file is an image [duplicate]