2013-12-12 2 views
0

Я имею эту функцию, чтобы получить предметы из каталога:PHP - удалить элементы, которые не являются изображениями из массива

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

Вместо того, чтобы удалять ненужные изображения, почему бы просто не добавить их в первую очередь?

... 
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; 
    } 
} 
+0

Это работает как шарм :). Один быстрый вопрос (мои знания о регулярном выражении очень ограничены) - это выражение охватывает малые и заглавные буквы (PNG и png одинаковы)? – Sasha

+0

Добавьте 'i' сразу после последнего'/'в regex preg_match, это позволит случай не иметь значения. –

+0

Спасибо, много мат :). Ты помог мне больше, чем знаешь :). – Sasha

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. 

ли функции вы ищете.

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; 
} 
0

Получение файлов, изображений в PHP является трудной задачей. Если это ненадежные файлы, то вам лучше провести много исследований о том, как вы собираетесь подходить к этой дезинфекции этих изображений, и, в частности, фильтрация фильтров MIME и фильтрация расширений недостаточно хороши. Также нет getimagesize().

Однако, если в этих каталогах нет шансов получить ненадежные файлы, вы можете просто расширить фильтр, проверив конец своих имен файлов для своих соответствующих расширений. Или используйте функцию PHP getimagesize() и посмотрите, вернет ли что-нибудь, но это даст вам больше, чем только указанные вами форматы изображений.

См. PHP how can i check if a file is mp3 or image file? для получения дополнительных сведений о типах MIME и обнаружении изображений.

Смежные вопросы