Informations avec PATHINFO

Certains d'entres vous connaissent certainement l'instruction PHP PATHINFO... bien heureux...

Mais pour ceux qui ne la connaissent pas, elle peut devenir utile dans nos développements PHP. Imaginons que vous ayez besoin de connaître l'extension d'un fichier sur un chemin système précis et de séparer le nom du fichier, son extension, son répertoire et le nom complet de votre fichier. Et bien, je crois que nous n'avons plus besoin de regex ou de parser le chemin avec je ne sais quelle instruction, fonction, classe, ..., PATHINFO est là pour nous aider ;-)

Exemple :
Chemin système : /var/www/html/projet/modules/bidule/include.php

PATHINFO peut nous donner ceci en résultat :

$path_array = pathinfo('/var/www/html/projet/modules/bidule/include.php');

  1. /var/www/html/projet/modules/bidule
  2. include.php
  3. php
  4. include
$dirname = $path_array['dirname'];
$basename = $path_array['basename'];
$extension = $path_array['extension'];
$filename = $path_array['filename'];


Cette instruction nous renvoit un tableau associatif contenant des informations sur un chemin système. Pour être exact, elle nous renvoit les 4 informations suivantes :

  • PATHINFO_DIRNAME
  • PATHINFO_BASENAME
  • PATHINFO_EXTENSION
  • PATHINFO_FILENAME

Nous pourrions ne demander qu'une seule des informations qui nous intéresse en spécifiant l'option qui va bien comme ceci :

$path_extension = pathinfo('/var/www/html/projet/modules/bidule/include.php', PATHINFO_EXTENSION);


Vous allez me dire, oui mais je n'ai que le nom du fichier... qu'à cela ne tienne, vous pouvez mettre un chemin fictif, PATHINFO ne vérifie pas si le chemin ou/et le fichier existe ;-)

$path_array = pathinfo('/mon/chemin/bidon/include.php');


Bien évidemment, nous ne vivons pas dans un monde parfait et si par malchance vous deviez avoir des noms de fichier avec des extensions composés de deux points comme un fichier tar gunzip, tout serait correct sauf l'extension et le nom du fichier !

Exemple:
Chemin système : /var/www/html/projet/modules/bidule/test.tar.gz

Basename: test.tar.gz
Dirname: /var/www/html/projet/modules/bidule
Extension: gz
Filename: test.tar

Avec un moyen moins élégant que PATHINFO, nous pouvons quand même récupérer la bonne extension.

function targz($parts) {
	$extension = $parts['extension'];
	if ($extension == 'gz') {
	  $parts = pathinfo($parts['filename']);
	  $extension = $parts['extension'] . '.' . $extension;
	}
	return $extension;
}

$pathinfo = pathinfo('/var/www/html/projet/modules/bidule/test.tar.gz');
echo 'Extension: '.targz($pathinfo);


Bon code ;-)

blog comments powered by Disqus