2012-12-21 11 views
5

Mam stronę do przesyłania filmów i chcę, aby typy plików były mp4 flash i pliki webm. wszystkie pliki rozszerzeń mp4 i pliki webm działają dobrze, ale pliki flash (.flv i .f4v) nie są rozpoznawane i dlatego php zwraca wartość 'application/oktet-stream', co moim zdaniem jest domyślnym MIME dla plików, które nie są dostępne. t rozpoznany. czy istnieje lepsza metoda niż ten kod, który rozpozna pliki flash dla prawdziwych MIMES (video/x-flv i video/x-f4v)?Wysyłanie php nie rozpoznaje rozszerzeń .flv i f4v

$type = $_FILES["uploaded"]["type"]; 
$allowedTypes = ["video/mp4","video/quicktime","video/x-flv","video/x- f4v", 
       "video/webm"]; 
$isRefusedType = !in_array($type, $allowedTypes); 


if ($isRefusedType) 
{ 
    $message="not an accepted file type"; 
} 
    else $message="OK"; 

Odpowiedz

2

Może spróbuj tego kodu:

<?php 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // mimetype 
    $type = finfo_file($finfo, $filename); 
    finfo_close($finfo); 
?> 

Jak opisano here, trzeba PHP> = 5.3.0, jest to problem?

Innym pomysłem może być sprawdzenie podpisu danych (patrz there):

<?php 
    $s = file_get_contents($_FILES["uploaded"]["tmp_name"]); 
    if (substr($s,0,3) == 'FLV') { /* It's good! */ } 
?> 
+0

mam php 5.4.3 * Myślę *, więc powinno być dobrze dzięki, Ill dać to strzał – user1559811

2

Oglądając w opisie $ _FILES [ 'userfile'] [ 'typu'] w dokumentacji php tylko możemy zobacz:

Typ MIME pliku, jeśli przeglądarka podała tę informację. Przykładem może być "image/gif". Ten typ mime nie jest jednak sprawdzany po stronie PHP i dlatego nie przyjmuje jego wartości za pewnik.

Więc opcja Tiger-222 wydaje się być Twoja najlepsza szansa, aby uzyskać rzeczywistą wartość:

<?php 
    $finfo = finfo_open(); 
    $fileinfo = finfo_file($finfo, $file, FILEINFO_MIME); 
    finfo_close($finfo); 
?>