pathinfo

pathinfo($path, $flags)

Renvoie un tableau avec les clés dirname (dossier), basename (nom), extension et filename (nom sans l’extension). Avec le second paramètre, elle ne renvoie qu’une seule partie sous forme de chaîne.

Paramètres

  • $path – le chemin d’un fichier.
  • $flags – facultatif, PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION ou PATHINFO_FILENAME.

Exemples

$info = pathinfo("/var/www/images/vacances.JPG");
echo $info["dirname"]; // /var/www/images
echo $info["basename"]; // vacances.JPG
echo $info["extension"]; // JPG
echo $info["filename"]; // vacances
// seulement l'extension, convertie en minuscules
echo strtolower(pathinfo("photo.JPG", PATHINFO_EXTENSION)); // jpg
// pour une double extension, seule la dernière partie est renvoyée
echo pathinfo("sauvegarde.tar.gz", PATHINFO_EXTENSION); // gz
// un fichier sans extension n'a pas de clé extension
var_dump(isset(pathinfo("README")["extension"])); // bool(false)
var_dump(pathinfo("README", PATHINFO_EXTENSION)); // string(0) ""
// un nom qui commence par un point est pris pour une extension
echo pathinfo(".htaccess", PATHINFO_EXTENSION); // htaccess
// extensions autorisées d'un fichier envoyé
$allowed = array("jpg", "jpeg", "png", "webp");
var_dump(in_array(strtolower(pathinfo("photo.PNG", PATHINFO_EXTENSION)), $allowed, true)); // bool(true)

Points d’attention

  • L’extension est renvoyée dans la même casse que dans le nom. Convertissez-la en minuscules avant de la comparer.
  • L’extension tirée du nom ne dit rien du contenu réel du fichier. Pour les fichiers envoyés, vérifiez aussi le type d’après le contenu, par exemple avec finfo_file().
  • Un fichier sans extension n’a pas de clé extension dans le tableau. Y accéder sans isset() affiche un avis.
  • Le fichier « image.php.jpg » a l’extension jpg selon pathinfo(). Un serveur mal configuré peut quand même l’exécuter comme du PHP, renommez donc les fichiers envoyés.

Fonctions associées :
basename()
dirname()
finfo_file()
strtolower()