编程语言
首页 > 编程语言> > php – GetImageSize()应该没有返回FALSE

php – GetImageSize()应该没有返回FALSE

作者:互联网

在这里处理一点上传脚本.我正在尝试检查上传的图像是否真的是图像,而不仅仅是重命名的PHP文件.

发布脚本后,我可以打印数组

foreach ($_FILES['images']['name'] as $key => $value){             
        print_r(getimagesize($_FILES['images']['tmp_name'][$key]));

这很好,所以它不会返回false.但即使我上传的文件不是图像,也不会给出错误.它根本不返回任何内容,我的脚本的其余部分只是像图像一样处理事物.

谁能告诉我我做错了什么?

解决方法:

上传

你不能直接在$_FILES [‘images’] [‘tmp_name’] [$key]上使用getimagesize ..你需要先将它复制到你的系统才能使用它

暂时使用$_FILES [‘images’] [‘size’] [$key]

要么

  move_uploaded_file($_FILES['images']['tmp_name'][$key], $destination);
  print_r(getimagesize($destination));

 假图像

请注意,$_FILES [‘images’] [‘type’] [$key]可以伪造

使用伪图像标题

file_put_contents("fake.png", base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAZQTFRF////
AAAAVcLTfgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gQCEx05cq
KA8gAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII='));

正在上传fake.png

array
  'name' => 
    array
      0 => string 'fake.png' (length=8)
  'type' => 
    array
      0 => string 'image/png' (length=9)
  'tmp_name' => 
    array
      0 => string 'C:\Apache\xampp\tmp\php44F.tmp' (length=30)
  'error' => 
    array
      0 => int 0
  'size' => 
    array
      0 => int 167

 验证图像

用法

var_dump ( getimagesizeReal ( "fake.png" ) );

使用的功能

function getimagesizeReal($image) {

    $imageTypes = array (
            IMAGETYPE_GIF,
            IMAGETYPE_JPEG,
            IMAGETYPE_PNG,
            IMAGETYPE_SWF,
            IMAGETYPE_PSD,
            IMAGETYPE_BMP,
            IMAGETYPE_TIFF_II,
            IMAGETYPE_TIFF_MM,
            IMAGETYPE_JPC,
            IMAGETYPE_JP2,
            IMAGETYPE_JPX,
            IMAGETYPE_JB2,
            IMAGETYPE_SWC,
            IMAGETYPE_IFF,
            IMAGETYPE_WBMP,
            IMAGETYPE_XBM,
            IMAGETYPE_ICO 
    );
    $info = getimagesize ( $image );
    $width = @$info [0];
    $height = @$info [1];
    $type = @$info [2];
    $attr = @$info [3];
    $bits = @$info ['bits'];
    $channels = @$info ['channels'];
    $mime = @$info ['mime'];

    if (! in_array ( $type, $imageTypes )) {
        return false; // Invalid Image Type ;
    }
    if ($width <= 1 && $height <= 1) {
        return false; // Invalid Image Size ;
    }

    if($bits === 1)
    {
        return false; // One Bit Image .. You don't want that  ;
    }
    return $info ;
}

标签:php,validation,getimagesize
来源: https://codeday.me/bug/20190926/1819556.html