PHP 5.3 : fileinfo : obtenir des informations sur des fichiers

6 novembre 2008php, php-5.3
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

Les exemples correspondant à ce point se trouvent dans le répertoire "fileinfo".

mime_magic ? Non : Fileinfo !

Jusqu'à présent, nous utilisions mime_magic pour déterminer le type de données contenues dans un fichier...
Par exemple, pour vérifier lors d'un upload de fichier que le fichier envoyé par l'utilisateur correspondait bien au type que l'on attendait (sur un site de partage de photos, on vérifierait que le type mime est de la forme image/*, par exemple).

Cette extension est maintenant marquée comme dépréciée : il est prévu qu'elle disparaisse lors de la sortie d'une prochaine version de PHP.

A la place de mime_magic, à partir de PHP 5.3, vous devriez utiliser l'extension Fileinfo.
Cette extension existait sur PECL depuis quelques temps déjà ; elle est maintenant intégrée à PHP, avec une nouveauté : elle fonctionne sous tous OS, et non plus uniquement sous Linux.


Exemple d'utilisation de Fileinfo

En terme d'utilisation, le principe est le suivant :

  • Vous ouvrez une base de données de "magie mime", à partir de laquelle il est possible de déterminer le type MIME d'un fichier en se basant sur son contenu,
  • Puis vous passez votre fichier à la méthode file de la classe Finfo.

Par exemple, pour déterminer les types MIME de trois fichiers :

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
if (!$finfo) {
    echo "Échec de l'ouverture de la base de données fileinfo";
    die;
}
var_dump($finfo->file(__FILE__));
var_dump($finfo->file('/etc/php/php.ini'));
var_dump($finfo->file('/bin/grep'));

Le résultat obtenu sera le suivant :

string 'text/plain charset=utf-8' (length=24)
string 'text/plain charset=us-ascii' (length=27)
string 'application/octet-stream' (length=24)

En effet, mon fichier source PHP est encodé en UTF-8 ; le fichier de configuration de PHP, quant à lui, est encodé de manière plus simple ; et grep est un programme binaire.