Quelle est la différence entre les chemins relatifs et absolus ?

Astuce par (Intégrateur du Dimanche, Strasbourg)
Créé le , mis à jour le (117857 lectures)
Tags : web, chemin, relatif, absolu, slash, path

Chemin relatif et absolu

Souvent source d'erreurs, de pages introuvables, d'images manquantes ou de styles non appliqués, le format d'écriture des liens est très important. Et pourtant, on ne prend pas forcément garde à la façon dont on fait pointer ces dernier vers les différents fichiers cible. Suivant la convention d'écriture utilisée, de nombreux problèmes peuvent survenir. En effet, deux types d'écritures cohabitent, chacune avec leur spécificité propre :

  • le chemin relatif (absence de slash initial)
  • le chemin absolu (slash en préfixe du chemin)

Sur le web

Chemin relatif

dossier/page.html

La cible (page.html) va être cherchée par le navigateur à partir de la page html ou de la feuille de style qu'il interprète, dans le sous-répertoire "dossier".

./dossier/page.html

./ : signifie que la page est cherchée à partir du répertoire courant.

../dossier/page.html

../ : signifie que la page est cherchée à partir du répertoire parent (on remonte d'un niveau).

Il est tout à fait possible de remonter plusieurs répertoires. Pour cela il faudra cumuler les ../ et ainsi pour remonter de deux niveaux, il sera possible d'écrire ../../dossier/page.html.

Chemin absolu

/dossier/page.html

Le slash initial précise que l'on ne se réfère plus à l'emplacement courant mais que l'on remonte directement à la racine pour ensuite préciser le chemin complet.

Dans bien des cas, le chemin absolu est la convention d'écriture la plus sûre, mais aussi la moins souple si l'arborescence est amenée à changer. La page cible sera cherchée par le navigateur à partir de la racine du site.

Dans notre exemple, le fichier page.html sera recherché directement à partir de la racine du domaine : http://www.mondomaine.fr/dossier/page.html.

En langage côté serveur (PHP, Ruby, Python...)

Le chemin relatif

dossier/page.php
./dossier/page.php
../dossier/page.php

La cible (page.php) va être cherchée à partir du fichier exécuté. Attention : si vous utilisez cette convention d'écriture pour un fichier inclus au moyen de la fonction include(), soyez conscient que le chemin relatif part non pas du fichier lui-même, mais du fichier dans lequel est placé son contenu : il s'agit du fichier exécuté par le serveur.

Chemin absolu

/dossier/page.php

La cible va être cherchée en partant de la racine du système de fichiers qui est représentée par le slash initial : /.

Par exemple sous Windows : include('/inc/menu.php'); équivaudrait à C:>inc\menu.php et non pas à http://www.domaine.fr/inc/menu.php qui n'est au fond qu'une vue "virtuelle" du répertoire qui héberge le site, et qui peut être placée n'importe où dans l'arborescence du système de stockage. Sous Linux, cela équivaudrait à remonter au premier niveau de l'arborescence du point de montage.

Pour obtenir la racine du serveur web, utilisez la variable PHP $_SERVER['DOCUMENT_ROOT'] en préfixe.

Voir en complément : Inclure un fichier dans un autre grâce à PHP.

Ressources