2009-01-19 13 views

Antwort

10

Sie finfo_file bei

<?php 
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png"); 
?> 
+0

Beachten Sie, dass diese Methode eigene Probleme hat (z. B. leere oder mehrdeutige Strings zurückgeben). – Sampson

3

Ich glaube, Sie finfo_file() bedeuten MIME-Typ

von php.net Beispiel zu entdecken:

<?php 
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    echo finfo_file($finfo, $filename) . "\n"; 
} 
finfo_close($finfo); 
?> 
5

Schauen Sie verwenden können "magische Zahlen." Die ersten paar Bytes von Dateien identifizieren normalerweise, um welchen Dateityp es sich handelt. Zum Beispiel sind die ersten paar Bytes eines GIF entweder 47 49 46 38 37 61 oder 47 49 46 38 39 61, ASCII für GIF89a oder GIF87a. Es gibt viele andere "magische Zahlen". Siehe http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

EDIT: Ich glaube, das ist zuverlässiger als MIME-Funktionen auf PHP.

2

Sie können dem vom Browser zurückgegebenen Inhaltstyp nicht vertrauen. Es basiert auf Dateierweiterung und kann leicht ausgetrickst werden.

Als stalepretzel erwähnt es, beste Möglichkeit zu erraten Datei Inhalt-Typ verwendet magische Zahlen. Wenn Ihr Server auf einem * nix-Maschine ausgeführt wird, können Sie diese Funktion verwenden:

<?php 

function get_file_type($file) { 
    if(function_exists('shell_exec') === TRUE) { 
    $dump = shell_exec(sprintf('file -bi %s', $file)); 
    $info = explode(';', $dump); 
    return $info[0]; 
    } 
    return FALSE; 
} 

?> 

Usage: $file_type = get_file_type('my_file_name.ext'); 

PD: Check /usr/share/magic.mime, um weitere Informationen.

+0

Bitte beachten Sie, dass die Verwendung von shell_exec ein potenzielles Sicherheitsproblem darstellt – josh123a123

Verwandte Themen