为了账号安全,请及时绑定邮箱和手机立即绑定

PHP检查文件是否为图像

PHP检查文件是否为图像

PHP
芜湖不芜 2019-12-02 12:56:09
有没有办法确保收到的文件中包含图像PHP?对扩展程序的测试对我来说并不十分安全,因为您可以上传一个script并将其扩展名更改为所需的扩展名。我也尝试使用getimagesize,但是可能有一些更适合该特定问题的东西。
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

获取mimetype的本机方法:


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

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


获得MimeType的替代方法是exif_imagetype和getimagesize,但是这些方法依赖于安装适当的库。此外,它们可能仅返回图像模仿类型,而不是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;

}


查看完整回答
反对 回复 2019-12-02
?
GCT1015

TA贡献1827条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-12-02
?
慕标5832272

TA贡献1966条经验 获得超4个赞

使用文件扩展名和getimagesize功能来检测上载的文件是否具有正确的格式只是入门级检查,它可以简单地通过上传具有真实扩展名和图像头的某些字节但内容错误的文件来绕过。

为了安全起见,您可以对上传的图片进行缩略图/调整大小(即使具有原始图像尺寸),并保存此版本而不是上传的版本。还可以获取上传的文件内容并搜索特殊字符,例如<?php查找文件是否为图片。


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 600 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信