HOWTO · PHP

Obtenir le nom et le chemin du répertoire actuel en PHP

Ce tutoriel explique comment obtenir le nom et le chemin du répertoire actuel en PHP.

Sur cette page

PHP propose plusieurs façons de travailler avec un chemin actuel ; le bon choix dépend de ce que signifie « actuel ». getcwd() renvoie le répertoire de travail du processus ; __DIR__ désigne le répertoire qui contient le fichier PHP courant. Ces emplacements peuvent différer si le script est lancé depuis un autre répertoire ou inclus par un autre fichier. Utilisez dirname() pour remonter d’un chemin à son répertoire parent, et basename() pour n’en obtenir que le dernier composant.

Obtenir le répertoire de travail actuel avec getcwd()

Appelez getcwd() pour récupérer le répertoire de travail du processus sous forme de chaîne de chemin. Ce répertoire sert de base à de nombreux chemins de fichiers relatifs, mais ce n’est pas nécessairement celui où se trouve le fichier du script. include et require suivent d’autres règles de recherche, notamment include_path et le répertoire du fichier appelant ; getcwd() ne suffit donc pas à décrire la résolution de tous les chemins d’inclusion. Par exemple, un processus en ligne de commande peut démarrer dans /srv/app et exécuter un script stocké dans /srv/app/bin ; dans ce cas, getcwd() renvoie /srv/app. Ces chemins sont donnés à titre d’illustration : le répertoire de travail dépend de la façon dont le processus a été lancé et peut changer pendant son exécution.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

<?php
$workingDirectory = getcwd();
if ($workingDirectory !== false) {
    echo $workingDirectory;
}
?>

L’exemple affiche le répertoire de travail du processus lorsque PHP peut le déterminer. Son chemin absolu dépend du mode de lancement du processus. Dans le code applicatif, vérifiez le résultat de getcwd() avant de l’utiliser : la fonction peut renvoyer false si PHP ne parvient pas à déterminer le répertoire de travail. Gérez ce résultat avant de concaténer des chemins ou de le transmettre à des opérations sur les fichiers.

Obtenir le répertoire du script actuel avec DIR

La constante magique __DIR__ correspond au répertoire du fichier PHP où elle apparaît. Contrairement à getcwd(), elle reste liée à ce fichier même si le processus démarre ailleurs. Si bootstrap.php inclut lib/config.php, la valeur de __DIR__ écrite dans config.php désigne le répertoire qui contient config.php, et non celui de bootstrap.php ni nécessairement le répertoire de travail du processus.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

<?php
$scriptDirectory = __DIR__;
echo $scriptDirectory;
?>

Cette constante est utile pour accéder aux fichiers livrés avec le script courant. Par exemple, un script peut construire à partir de $scriptDirectory un chemin vers une ressource située dans le même répertoire, indépendamment du répertoire depuis lequel il a été lancé. Le chemin absolu affiché varie selon l’installation ; cet exemple n’a donc pas de sortie fixe. dirname(__FILE__) permet également d’obtenir le répertoire du fichier courant ; __FILE__ est le chemin complet de ce fichier.

Déduire un répertoire à partir d’un chemin avec dirname()

Utilisez dirname() lorsque vous disposez déjà d’un chemin et que vous avez besoin de son répertoire parent. Appliquée à __DIR__, la fonction remonte d’un niveau au-dessus du répertoire du fichier courant ; appliquée à __FILE__, elle renvoie le répertoire qui contient ce fichier. Elle traite la chaîne du chemin sans vérifier que le répertoire obtenu existe.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

<?php
$parentDirectory = dirname(__DIR__);
echo $parentDirectory;
?>

Pour un fichier situé sous /srv/app/src, cette méthode permet d’obtenir /srv/app. Le chemin indiqué est un exemple ; la valeur réelle dépend de l’emplacement du fichier PHP. Utilisez le chemin obtenu comme base lorsqu’une ressource se trouve dans un répertoire parent, et vérifiez séparément l’accès au système de fichiers si l’opération nécessite un répertoire existant.

Obtenir le nom du répertoire avec basename()

basename() renvoie le dernier composant du chemin fourni. Pour un chemin de répertoire comme /var/www/project, la fonction renvoie project ; elle ne renvoie pas le chemin complet. Pour un chemin de fichier comme /var/www/project/config.php, elle renvoie config.php, c’est-à-dire un nom de fichier. Selon le chemin fourni, la même fonction extrait donc le nom d’un répertoire ou celui d’un fichier.

Utilisez basename() pour l’affichage ou la comparaison lorsque seul le dernier composant vous intéresse. Conservez le chemin complet pour les opérations sur les fichiers : le composant seul ne désigne pas un emplacement unique et peut correspondre à différents répertoires du système de fichiers.

Choisir le chemin adapté à votre tâche

  • Utilisez getcwd() lorsqu’un chemin relatif doit être résolu à partir du répertoire de travail du processus. Vérifiez son résultat d’échec false avant de l’utiliser.
  • Utilisez __DIR__ lorsqu’un chemin doit être relatif au fichier PHP lui-même, y compris pour du code chargé avec include ou require.
  • Utilisez dirname() pour déduire un répertoire parent à partir de __DIR__, de __FILE__ ou d’un autre chemin.
  • Utilisez basename() lorsque seul le dernier composant du chemin vous intéresse, et conservez le chemin complet pour localiser une ressource.

Pour les fichiers de configuration, les modèles et les autres ressources livrées avec une application, un chemin construit à partir de __DIR__ est généralement plus prévisible qu’un chemin fondé sur le répertoire de travail du processus. Choisissez getcwd() lorsque l’appelant contrôle volontairement ce répertoire, par exemple pour un outil en ligne de commande qui traite un dossier sélectionné.