filetype()
La fonction filetype() est une fonction PHP intégrée qui retourne le type d'un fichier sous forme de chaîne string.
Qu'est-ce que la fonction filetype() ?
filetype() est une fonction PHP intégrée qui vous indique quel type d'entrée du système de fichiers un chemin désigne — un fichier ordinaire, un répertoire, un lien symbolique, etc. Elle prend un seul chemin et retourne le type sous forme de string en minuscules, ou false en cas d'échec.
C'est utile lorsque vous parcourez un répertoire et devez traiter différemment les fichiers et les sous-répertoires, lorsque vous validez qu'un fichier téléversé s'est retrouvé à l'emplacement attendu, ou lorsque vous devez ignorer des entrées spéciales (pipes, fichiers de périphérique) qui ne doivent pas être lus comme des fichiers ordinaires.
Voici la syntaxe :
La syntaxe PHP de filetype()
filetype(string $filename): string|falseOù $filename est un chemin relatif ou absolu vers l'entrée que vous souhaitez inspecter.
Valeurs de retour
filetype() retourne l'une de ces strings :
| String retournée | Signification |
|---|---|
file | Un fichier ordinaire |
dir | Un répertoire |
link | Un lien symbolique |
fifo | Un pipe nommé (FIFO) |
socket | Un socket de domaine Unix |
block | Un périphérique bloc (ex. un disque) |
char | Un périphérique caractère (ex. un terminal) |
unknown | Le type n'a pas pu être déterminé |
Si le chemin n'existe pas ou ne peut pas être lu, filetype() retourne false et émet un E_WARNING. Comme false est considéré comme égal à la string vide dans une comparaison souple, vérifiez toujours le résultat avec === avant de vous y fier.
Comment utiliser la fonction filetype() ?
Passez un chemin et inspectez la string retournée :
Utilisation de base
<?php
$path = __FILE__; // the path of the currently running script
$type = filetype($path);
echo "The entry '$path' is of type: $type";
// e.g. The entry '/var/www/index.php' is of type: fileL'utilisation de __FILE__ garantit que le chemin existe, de sorte que l'exemple s'exécute partout sans configuration préalable.
Gérer le retour false
Puisque filetype() retourne false pour un chemin manquant ou illisible, protégez l'appel avant d'utiliser le résultat. Vérifier d'abord avec file_exists() permet d'éviter entièrement l'avertissement :
Consultation sécurisée
<?php
$path = '/path/that/does/not/exist';
if (!file_exists($path)) {
echo "Path not found.";
} else {
$type = filetype($path);
echo $type === false
? "Could not determine the type."
: "Type: $type";
}
// Path not found.Distinguer fichiers et répertoires lors d'une itération
Une tâche courante consiste à parcourir un répertoire et à agir uniquement sur les fichiers ou uniquement sur les sous-répertoires. filetype() rend la branche explicite :
Classifier les entrées d'un répertoire
<?php
$dir = sys_get_temp_dir(); // a directory that always exists
foreach (scandir($dir) as $entry) {
if ($entry === '.' || $entry === '..') {
continue; // skip the self/parent references
}
$full = $dir . DIRECTORY_SEPARATOR . $entry;
echo $entry . ' => ' . filetype($full) . PHP_EOL;
}Ici, scandir() liste le contenu du répertoire et filetype() étiquette chaque entrée. Pour un parcours de plus bas niveau, vous pouvez utiliser readdir() avec opendir() à la place.
filetype() vs. is_file() et is_dir()
Lorsque vous n'avez besoin que d'une réponse oui/non pour un type spécifique, les fonctions prédicats dédiées sont plus claires et ne nécessitent pas de comparaison de string :
is_file()—truesi le chemin est un fichier ordinaire.is_dir()—truesi le chemin est un répertoire.
Utilisez filetype() lorsque vous devez distinguer plusieurs types possibles en un seul endroit (par exemple pour ignorer les FIFOs et les sockets), et utilisez is_file() / is_dir() lorsqu'une vérification booléenne unique est plus lisible.
Attention au cache des stats
PHP met en cache les résultats des fonctions du système de fichiers pour la durée d'une requête. Ainsi, si un chemin est créé, supprimé ou remplacé après la première vérification, filetype() peut signaler une valeur périmée. Appelez clearstatcache() pour forcer une nouvelle consultation. Notez également que filetype() suit les liens symboliques à la manière de stat() — pour détecter le lien lui-même, utilisez lstat().
Conclusion
filetype() retourne le type d'une entrée du système de fichiers sous forme de string (file, dir, link, etc.) et false en cas d'échec. Protégez le résultat avec ===, vérifiez le chemin avec file_exists() pour éviter les avertissements, et pensez à clearstatcache() lorsque vous revérifiez un chemin modifié en cours de requête. Pour des vérifications portant sur un seul type, préférez is_file() et is_dir() ; pour l'ensemble des statistiques d'un fichier en un seul appel, consultez stat().