2012-12-21 18 views
5

Ho una pagina per caricare video e voglio che i tipi di file siano mp4 flash e file webm. tutti i file di estensione mp4 e webm funzionano bene ma i file flash (.flv e .f4v) non sono riconosciuti e quindi php restituisce il valore 'application/octet-stream' che credo sia il MIME predefinito per tutti i file che non sono t riconosciuto. c'è un metodo migliore di questo codice che riconoscerà i file flash per i veri MIMES (video/x-flv e video/x-f4v) rispettivamente?caricamento php non ricodifica. Estensioni .flv e 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"; 

risposta

2

Forse si può provare questo codice:

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

Come descritto here, avrete bisogno di PHP> = 5.3.0, è un problema?

Un'altra idea potrebbe essere quella di verificare la firma dei dati (vedi there):

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

ho PHP 5.4.3 * * Credo, quindi dovrebbe essere bene grazie, Ill dare è un colpo – user1559811

2

Guardando alla descrizione di $ _FILES [ 'userfile'] [ 'type'] nella documentazione php possiamo vedi:

Il tipo mime del file, se il browser ha fornito queste informazioni. Un esempio potrebbe essere "immagine/gif". Tuttavia, questo tipo di mime non viene controllato sul lato PHP e pertanto non dà per scontato il suo valore.

Quindi l'opzione Tiger-222 sembra essere la tua migliore possibilità di ottenere il valore reale:

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