2010-03-16 5 views
3

J'essaie de déterminer le type mime d'un fichier. J'ai essayé quelques méthodes, mais je n'ai rien trouvé qui donne une sortie cohérente. J'ai essayé $mime = mime_content_type($file) et $mime = exec('file -bi ' . $file). Je suis en train de diffuser des images, CSS et JavaScript.Détermination du type MIME d'un fichier local (type de contenu) Avec PHP

Exemple mime_content_type() sortie:

  • jquery.min.js - type text/plain
  • editor.js - text/plain
  • admin.css - text/plain
  • controls.css - application/x-troff
  • logo.png - text/plain

Exemple exec(...) sortie:

  • jquery.min.js - text/plain; charset = us-ascii
  • editor.js - text/x-C++; charset = us-ascii
  • admin.css - text/x-c; charset = us-ascii
  • controls.css - text/x-c; charset = us-ascii
  • logo.png - image/png

Comme on le voit ici, les résultats sont un peu partout.

Ma version PHP est 5.2.6


SOLUTION (grâce à Jacob)

$mimetypes = array(
    'gif' => 'image/gif', 
    'png' => 'image/png', 
    'jpg' => 'image/jpg', 
    'css' => 'text/css', 
    'js' => 'text/javascript', 
); 
$path_parts = pathinfo($file); 
if (array_key_exists($path_parts['extension'], $mimetypes)) { 
    $mime = $mimetypes[$path_parts['extension']]; 
} else { 
    $mime = 'application/octet-stream'; 
} 
+0

Vous avez dit que vous utilisiez 5.2.6, comment puis utilisez-vous 'fileinfo'? –

+0

'pathinfo()' a été créé depuis PHP 4.0.3 - http://us.php.net/pathinfo – Sonny

+2

mis à jour pour ajouter une solution, cela dit, la solution fournie est intrinsèquement non sécurisée car elle ne vérifie que les extensions de fichiers et ne devrait pas être utilisé sur les fichiers téléchargés pour vérifier la validité. – buggedcom

Répondre

4

L'extension Fileinfo fera le travail, si vous êtes sur> = 5.30

  • Vous devriez essayer d'éviter d'avoir à exécuter des commandes
  • mime_content_type est désapprouvée en PHP 5,30

Si, malheureusement, vous êtes sur < 5,30, alors je serais probablement juste écrire moi-même, il est beaucoup plus fiable que ce que vous obtenez à partir des fonctions/commandes ci-dessus.

Voici un exemple:

<?php 
$filename = 'FILENAME HERE'; 
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css', 
    'js' => 'application/x-javascript' 
    // any other extensions that you may be serving  
); 

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename))); 
if(array_key_exists($ext, $mimetypes)) { 
    $mime = $mimetypes[$ext]; 
} else { 
    echo 'mime type not found'; 
} 

?> 
+0

L'info-fichier est PHP> = 5.3.0. Je suis sur 5.2.6. Je viens de mettre à jour mon post pour refléter cela. – Sonny

+1

En utilisant votre solution, mais vous devriez changer 'in_array()' en array_key_exists() 'et inverser les arguments. – Sonny

+0

Vous avez raison. Bonne prise! :) –