如何在PHP中识别文件是否为图像

如何在PHP中识别文件是否为图像,php,server,Php,Server,我尝试过使用getimagesize(),finfo和获取Mime类型函数。但是我注意到我们不能信任这些函数,因为我观察到它在我的一些图像文件中是失败的。我们有没有更好的方法来识别文件是否为图像。 用例:我有一个包含php代码的文件。我用一些图像扩展名保存了这个文件。现在我想阻止上传此文件。尝试php的内置方法检查图像类型 int exif_imagetype ( string $filename ) 如果文件不是有效图像,此方法将返回false,否则将返回指向图像类型的整数 它还抛出了一个通

我尝试过使用
getimagesize()
finfo
和获取Mime类型函数。但是我注意到我们不能信任这些函数,因为我观察到它在我的一些图像文件中是失败的。我们有没有更好的方法来识别文件是否为图像。
用例:我有一个包含php代码的文件。我用一些图像扩展名保存了这个文件。现在我想阻止上传此文件。

尝试php的内置方法检查图像类型

int exif_imagetype ( string $filename )
如果文件不是有效图像,此方法将返回
false
,否则将返回指向图像类型的整数

它还抛出了一个通知。所以你可以这样做

if(@exif_imagetype($file)){
     //Valid Image
} else {
     // Invalid
}

尝试php的内置方法来检查图像类型

int exif_imagetype ( string $filename )
如果文件不是有效图像,此方法将返回
false
,否则将返回指向图像类型的整数

它还抛出了一个通知。所以你可以这样做

if(@exif_imagetype($file)){
     //Valid Image
} else {
     // Invalid
}

我想你应该看一下报纸

mime_content_type 

请参阅下面文章的更多详细视图


我想你应该看一下

mime_content_type 

请参阅下面文章的更多详细视图


您可以尝试以下代码:

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG 
    ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}

您可以尝试以下代码:

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG 
    ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}

如果您的服务器在Linux上运行,则应执行
文件

$mime = exec("file $tmpFilePath -z -b --mime-type");

这将正确定义mime类型

如果服务器在Linux上运行,则应执行
文件

$mime = exec("file $tmpFilePath -z -b --mime-type");

这将正确定义mime类型

显示您的代码。可能重复显示您的代码。可能重复我尝试了此操作,但如果您保存的文件包含具有某个图像扩展名的脚本,则它也会返回有效的图像,但不应,你能粘贴文件的内容吗?希望看到保存为图像扩展名的文件也会返回有效的图像。我尝试过几种形式,如果无效,则返回false。我尝试过这种方法,但如果您保存的文件包含一些带有图像扩展名的脚本,那么它也会返回有效图像。您可以粘贴文件的内容吗?希望看到保存为图像扩展名的文件也会返回有效图像。我尝试了几种形式,如果无效,则返回false