pathinfo()
La fonction pathinfo() de PHP décompose un chemin de fichier en répertoire, nom de fichier et extension sous forme de tableau associatif.
Qu'est-ce que la fonction pathinfo() ?
La fonction pathinfo() est une fonction PHP native qui découpe un chemin de fichier en ses différentes parties — le répertoire, le nom de fichier et l'extension — et les renvoie sous la forme d'un tableau associatif. C'est l'utilitaire de référence dès que vous avez besoin de répondre à des questions comme « dans quel dossier se trouve ce fichier ? » ou « quelle est l'extension d'un fichier téléversé ? » sans avoir à écrire votre propre analyse de chaîne.
Un point essentiel à comprendre dès le départ : pathinfo() travaille uniquement sur la chaîne que vous lui fournissez. Elle ne touche jamais au système de fichiers, ce qui signifie que le chemin n'a pas besoin de pointer vers un fichier existant. Cela la rend rapide et sûre à utiliser sur des valeurs saisies par l'utilisateur (par exemple, le nom d'origine d'un fichier téléversé).
Cette page couvre la syntaxe, le tableau renvoyé par pathinfo(), la façon de demander un seul composant, ainsi que les cas particuliers qui surprennent souvent (pas d'extension, dotfiles, extensions composées).
Syntaxe
pathinfo(string $path, int $flags = PATHINFO_ALL): array|string$path— le chemin de fichier à inspecter. Il peut être absolu ou relatif et n'a pas besoin d'exister.$flags— optionnel. Lorsqu'il est omis (ou défini àPATHINFO_ALL), la fonction renvoie un tableau associatif. Lorsqu'il est défini sur un seul indicateur, elle renvoie uniquement ce composant sous forme de chaîne.
Le tableau renvoyé par pathinfo()
Par défaut, pathinfo() renvoie un tableau associatif contenant jusqu'à quatre clés :
| Clé | Signification | Exemple pour /var/www/html/index.php |
|---|---|---|
dirname | La partie répertoire | /var/www/html |
basename | Le nom complet du fichier avec son extension | index.php |
extension | L'extension (sans le point) | php |
filename | Le nom du fichier sans extension | index |
Ici, nous passons le chemin du fichier et stockons le tableau résultant dans $info, puis nous lisons chaque composant par sa clé.
Important : la clé
extensionn'existe que lorsque le chemin contient effectivement un.. Si le chemin n'a pas d'extension, cette clé est simplement absente du tableau, donc accéder directement à$info['extension']déclencherait un avertissement « Undefined array key ». Protégez-vous avec$info['extension'] ?? ''en cas de doute.
Renvoyer un seul composant
Si vous n'avez besoin que d'une seule partie, passez un indicateur en deuxième argument. Les indicateurs possibles sont PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION et PATHINFO_FILENAME. Avec un seul indicateur, la fonction renvoie une chaîne plutôt qu'un tableau :
C'est la façon la plus propre de récupérer uniquement l'extension — par exemple, pour vérifier qu'un fichier téléversé est d'un type autorisé.
Cas particuliers à surveiller
pathinfo() est tolérante, mais quelques résultats surprennent les développeurs :
<?php
// 1. No extension: the 'extension' key is missing entirely.
print_r(pathinfo('/etc/hosts'));
// Array ( [dirname] => /etc [basename] => hosts [filename] => hosts )
// 2. Multi-part extension: only the LAST part counts as the extension.
print_r(pathinfo('archive.tar.gz'));
// Array ( [dirname] => . [basename] => archive.tar.gz
// [extension] => gz [filename] => archive.tar )
// 3. Dotfile: the leading dot makes the whole name the "extension".
print_r(pathinfo('/home/user/.bashrc'));
// Array ( [dirname] => /home/user [basename] => .bashrc
// [extension] => bashrc [filename] => )Remarques :
- Un chemin sans répertoire (cas 2) indique
dirnamecomme.(le répertoire courant). - Pour les noms de type
.tar.gz,pathinfo()ne traite quegzcomme extension — il n'existe pas de moyen natif d'obtenirtar.gzen un seul appel. - Un dotfile comme
.bashrcest interprété comme « un fichier sans nom avec l'extensionbashrc», ce qui est rarement ce que l'on souhaite. Gérez ces cas manuellement si votre code les autorise.
Quand utiliser pathinfo() ?
Utilisez pathinfo() lorsque vous avez besoin de plusieurs parties d'un chemin à la fois, ou lorsque vous préférez un tableau lisible avec des clés nommées plutôt que de mémoriser quelle fonction dédiée fait quoi :
- Utilisez
pathinfo($p)pour obtenir le répertoire, le nom et l'extension ensemble. - Utilisez basename() si vous n'avez besoin que du nom de fichier — elle permet également de supprimer un suffixe connu.
- Utilisez dirname() si vous n'avez besoin que du répertoire, et elle gère plusieurs niveaux via son argument
$levels. - Utilisez realpath() lorsque vous devez résoudre un chemin sur le système de fichiers réel (liens symboliques,
.., etc.) — contrairement àpathinfo(), elle accède effectivement au disque et renvoiefalsepour les fichiers manquants.
Pour une vue d'ensemble plus large de la lecture et de l'écriture de fichiers, consultez PHP File Handling.
Conclusion
pathinfo() est le moyen le plus rapide de décomposer un chemin de fichier en son répertoire, son nom de base, son extension et son nom de fichier brut. Retenez qu'elle analyse uniquement la chaîne (elle ne vérifie jamais si le fichier existe), que la clé extension est absente lorsqu'il n'y a pas d'extension, et que seule la dernière extension est rapportée pour des noms comme archive.tar.gz. Pour les besoins d'un seul composant, les fonctions dédiées basename() et dirname() sont souvent plus claires.