首页  >  问答  >  正文

php - 怎么样过滤掉非图片呢?

现在所有文件都会被当做图片来处理 我希望如果只显示图片 不是图片就不处理 包括改过的拓展名的情况 这里好像也没法用getimagesize啊

$dir = "upload/";
    if (is_dir($dir)){
        if ($dh = opendir($dir)){
        while (($file = readdir($dh))!= false){
            if(!is_dir($file)) {
            }
        }
        closedir($dh);
        }
    }
大家讲道理大家讲道理2772 天前729

全部回复(3)我来回复

  • 阿神

    阿神2017-04-11 10:25:16

    肯定不能按扩展名来判断,因为扩展名可以修改的.
    不管你过来的是文件还是图片,它的路径都是一个字符串对吧!

    $url='./1.jpg';
    再用getimagesize 去获取这个$url 如果这个路径是一个有效的图片,就会返回一个数组,里面有图片的类型.下面就直接判断就行了.如果不是,就会返回false 并产生 E_WARNING 级的错误.
    只要能返回false 就说明这不是图片,就不处理,你想在这跳转还是return看你自己了.

    至于这个E_WARNING错误,PHP有设置可以让它不报级别的错误.不会自行百度.更何况当网站上线后,所有的级别错误都得屏闭.

    刚刚查了查PHP手册.你用这个函数去判断它的类型更好也更快! exif_imagetype 函数

    而且如果类型不是图片,直接返回false ,而且还不会报错误.实用性更加的强.推荐使用!

    回复
    0
  • 怪我咯

    怪我咯2017-04-11 10:25:16

    通过判断扩展名或者获取文件的MIME类型来判断,pecl中有一个这个扩展,你可以尝试

    http://php.net/manual/zh/book...

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-11 10:25:16

    通常根据扩展名判断的话直接截取扩展名,用in_array()判断就行了。
    既然说改过扩展名的情况,那就需要获取文件的信息。因此要获取MIME信息。
    这方面函数很多,可以使用Fileinfo函数获取。然后再判断。

    回复
    0
  • 取消回复