2013-08-19 3 views
1

Я следующий сценарий:Как проверить файл типа видео или нет в php?

function listFolderFiles($dir){ 
    $ffs = scandir($dir); 
    echo '<ol>'; 
    foreach($ffs as $ff){ 
     if($ff != '.' && $ff != '..'){ 
      echo '<li>'.$ff; 
      if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff); 
      echo '</li>'; 
     } 
    } 
    echo '</ol>'; 
} 
listFolderFiles('upload'); 

Мой вопрос, я хочу, чтобы обнаружить файл является видео (mp4 или MOV) типа, Как я могу обнаружить $ ФФ типа видео или нет?

+0

Вы можете использовать команду 'file', если вы находитесь на * nix. –

ответ

4
if(end(explode(".",$ff)) =="mp4") 
{ 
echo "its an mp4 movie"; 
} 

Там вы идете, для случая нечувствительных версий расширения

<?php 
$ff="abc.MP4"; 
if(strtolower(end(explode(".",$ff))) =="mp4") 
{ 
echo "its an mp4 movie"; 
} 
?> 
+0

А что, если я загрузил 'mymovie.MP4'? –

+0

вы могли бы просто добавить проверку strtolower –

+0

А что, если я загрузил 'mymovie.mpeg4'? –

0

Вы можете achive с preg_match

if(preg_match('/^.*\.(mp4|mov)$/i', $filename)) 
    echo $filename; 
} 

Вы можете добавить еще одно видео внутра как: (mp4|mov|mpg|mpeg|wmv|mkv)

0

Получите тип mime загружаемого файла и проверьте тип, как показано ниже,

$mime = $file->getMimeType; 
$videoJS = array('video/mp4','video/ogg','video/webm'); 

if(array_search($mime, $videoJS) !== false) { 
    //do upload 
} 
+2

Если вам нужен какой-либо тип кода, пожалуйста, не полагайтесь на тип MIME, представленный клиентом. Вместо этого используйте 'файл'. –

2

Используйте инструмент, например file. Этот ответ известен с точки зрения безопасности и общий ответ на загруженные типы файлов. Второе преимущество использования file - это более подробно расскажет о используемом формате. Существует много комбинаций форматов, которые могут быть законно сохранены в файле * .mpg. Возможно, вы не сможете справиться со всеми из них.

Я сделал более подробный веб-поиск, есть список повторяющихся текстовых статей, но надежных решений не было опубликовано. Существует детектор «магических байтов» в виде fileinfo. Это скомпилировано в самые последние версии PHP (его стандартное расширение).

NB: mime_content_type() устарел. Опять же, если вам нужно, попробуйте fileinfo

+0

Ссылка на файл мертва –

+1

@MainaWycliffe, er yeah it is. Попробуйте https://linux.die.net/man/1/file –

0
$fileType = exec('file --mime-type '.escapeshellarg($filePath)); //e.g. output -> /tmp/somefile.mov: video/quicktime 
$fileType = substr($fileType, strpos($fileType, ": ") + 2); //strip away file path -> video/quicktime 
$fileType = substr($fileType, 0,strpos($fileType, "/")); //strip away whatever video type -> video 
if ($fileType == 'video') $fileType = 'im a video!'; 

Этот код использует команду UNIX «файл» с опцией --mime типа, чтобы свести к минимуму выход для облегчения анализа. Не уверен, есть ли лучший способ разбора вывода.

Также убедитесь, что у вас есть разрешение на чтение файла, который вы проверяете.

5
// Type contains video/mp4,video/avi,video/mpeg,video/mpg etc 
    if(preg_match('/video\/*/',$_FILES['add_image_image']['type'])): 
     echo "THIS IS A VIDEO FILE"; 
    else: 
      echo "NOT A VIDEO FILE";   
    endif;