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