如何校验您上传的文件是一张合法的图片格式?这是PHP程序员在面试过程中常遇到的一个问题。笔者曾经也面试过若干PHPer,回答都不尽如人意。
大部分的回答如下:
这种方案最常见,其实也是有巨大漏洞的,比如我完全可以把一个.js的脚本改成.jpg后缀。这样就能顺利的绕开这种检查机制,更为致命的是:这个伪造的图片在某些浏览器上能够以js脚本的方式执行(比如江湖传说:IE6)。
这个我也懵,我也不知道怎么正则…
总体来说,以上两种方法都有较大问题,下面举一个我经常用的方案。很简单就是利用PHP的自带函数 getimagesize()。
getimagesize() 简介:
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
语法格式:
array getimagesize ( string $filename [, array &$imageinfo ] )
代码示例:
根据说明,我们可以通过该函数校验图片格式合法性,假如我们上传表单的字段名是logo。则代码如下:
<?php
if(!is_array(getimagesize($_FILES['file']['tmp_name']))){
return '不是合法图片';
}
当然,我这只是抛转引玉,有更好的办法大家可以留言交流。