PHP - 从数组中删除不是图像的项目

时间:2013-12-12 09:38:14

标签: php arrays

我有这个功能来从目录中获取项目:

if ($dh = opendir($dir)) {
                $images = array();

                while (($file = readdir($dh)) !== false) {
                    if (!is_dir($dir.$file)) {
                        $images[] = $file;
                    }
                }

                closedir($dh);
            }

        return $images;

该功能正在运行,我得到了这个结果(这是一个测试目录):

array (size=9)
  0 => string 'odluka o matinim podrujima.shs' (length=31)
  1 => string 'Odluka o optinskoj upravi.doc' (length=29)
  2 => string 'o_pirotu3.jpg' (length=13)
  3 => string 'o_pirotu4.jpg' (length=13)
  4 => string 'Panorama 10.jpg' (length=15)
  5 => string 'Panorama 8n.jpg' (length=15)
  6 => string 'Panorama n.jpg' (length=14)
  7 => string 'PRAVILNIK O ORGANIZACIJI I SISTEMATIZACIJI POSLOVA.doc' (length=54)
  8 => string 'Pravilnik_o_reprezentaciji.doc' (length=30)

如何删除所有非图像项目,是否有一些方法让我选择将保留在返回数组中的mime类型(我需要jpg,png和bmp)?

4 个答案:

答案 0 :(得分:4)

为什么不首先添加非图像,而不是删除非图像?

...
if( !is_dir($dir.$file)) {
    if( preg_match("/\.(png|gif|jpe?g|bmp)/",$file,$m)) {
        // $m[1] is now the extension of the filename
        // You can perform additional verification
        // Example: if $m[1] == 'png' check if imagecreatefrompng accepts it
        $images[] = $file;
    }
}

答案 1 :(得分:0)

string mime_content_type ( string $filename ) 
Returns the MIME content type for a file as determined by using information from the magic.mime file. 

mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Find the numeric position of the first occurrence of needle in the haystack string. 

您搜索的功能。

答案 2 :(得分:0)

Google是你的朋友......

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}

答案 3 :(得分:0)

在PHP中获取图像文件是一项艰巨的任务。如果这些是不受信任的文件,那么您最好对如何处理这些图像的消毒进行大量研究,特别是MIME类型过滤和扩展过滤不够好。也不是getimagesize(),真的。

但是,如果这些目录中不存在不受信任文件的可能性,那么您可以通过检查其文件名的各自扩展名的结尾来简单地扩展过滤器。或者,使用PHP的getimagesize()函数并查看是否返回任何内容,但这将为您提供的不仅仅是指定的图像格式。

有关MIME类型和检测图像的更多信息,请参阅PHP how can i check if a file is mp3 or image file?