如何用php判断上传的是否为图片阿

 我来答
一骑当后
2014-11-09 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40299 获赞数:306428
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
  PHP 图片上传,如果不做任何判断的话,随便一个文件如 rar,zip,php,java等文件改个文件名,改个后缀就能以图片形式上传的服务器,往往会造成极大的危害!
  工具/原料
  PHP
  apache / nginx / iis
  phpstorm / netbeans / notepad++ / editplus
  方法/步骤
  第一种方法:如果是只是单纯判断是否是图片格式的话,我使用 getimagesize 方法function checkIsImage($filename){ $alltypes = '.gif|.jpeg|.png|.bmp';//定义检查的图片类型 if(file_exists($filename)){ $result= getimagesize($filename); $ext = image_type_to_extension($result']); return stripos($alltypes,$ext); }else{ return false; }}
  第二种方法比较强大一些,能判断多种格式function getReailFileType($filename){ $file = fopen($filename, "rb"); $bin = fread($file, 2); //只读2字节 fclose($file); $strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ''; switch($typeCode){ case 7790: $fileType = 'exe';break; case 7784: $fileType = 'midi'; break; case 8297: $fileType = 'rar'; break; case 255216: $fileType = 'jpg';break; case 7173: $fileType = 'gif';break; case 6677: $fileType = 'bmp';break; case 13780: $fileType = 'png';break; default: $fileType = 'unknown'; } return $fileType;}
  第三种方法:
  PHP gd类库函数提供了一个exif_imagetype() 函数, 用来读取图像的第1个字节, 还会对图片的签名做检查。 如果格式不对,会返回false。 其实啊, 这个方法和第一种方法有异曲同工之妙。 但是因为这个是库函数,效率要比第一种方法高得多。

  此函数用法很简单,传入路径,然后通过判断是否等于某个常量, 例如 gif格式的IMAGETYPE_GIF
  第四种方法:php重绘
  效率很低的一种方法,但也是一种思路: 把传输过来的文件,不论什么文件都以resource 类型绘到图片中去, 如果是图片,能还原出来。如果不是图片,那绘画不出来,而且里面的危险代码也没有了。
  具体请看:
  
  总结: 我曾经在网上看到过有人说:相信懂得php的人都用过XX函数。 我打开一看,就是一个使用后缀来判断上传类型的函数。 同学在做类似功能的时候一定要揭开表现看到本质,否则经过伪装的图片在上传之后,会对服务器造成极大安全隐患。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式