chemin relatif et absolu

Chemins Relatif et Absolu

1. Qu’est-ce qu’un chemin ?

Un chemin, dans le jargon du net, est une adresse d’une ressource. (La ressource étant un document, une image, une musique … bref un fichier en général, ou encore un dossier).

Un site est caractérisé par 2 éléments :

  • son nom de domaine
  • ses dossiers et fichiers

Le nom de domaine est le nom qui est associé à l’adresse du site, par exemple « php-astux.info » est un nom de domaine.

Si je veux appeler le fichier de description de NewsletTux, je me sers du nom de domaine, puis du nom de fichier.

Pour cela, j’ai 2 moyens de m’y rendre : soit en « interne », soit en « externe ». Ce sont les chemins respectivement relatif et absolu.

2. Chemin relatif

C’est une méthode interne au site qui permet de se rendre d’une ressource à l’autre en se promenant dans l’arborescence. (L’arborescence est l’ensemble des dossiers contenant des dossiers ou des fichiers). Cette méthode ne dépend pas du nom de domaine, il suffit juste d’indiquer la marche à suivre pour aller d’une origine à une destination, en utilisant le vocabulaire élémentaire suivant :

  • remonte dans le dossier parent (= remonte dans l’arborescence)
  • ouvre le dossier […] ( = descend dans l’arborescence)
  • ouvre le fichier […]

Ces 3 commandes permettent de définir tous les mouvements d’un chemin relatif. Selon mon habitude, je vais prendre un exemple.

2.1. Arborescence 1

/ = racine du site
|
|-- index.html
|
|-- documents
  |-- archives
  |    |-- factures_2000.html
  |    |-- factures_1999.html
  |-- comptabilite.html
  |-- factures.html

L’arborescence de ce site est assez simple. Elle se compose d’une racine (le plus « haut » dossier du site, celui qui n’est contenu par personne d’autre), d’un fichier index.html et d’un dossier documents, contenant lui même un dossier archives(dans lequel il y a 2 fichiers) et 2 fichiers.

2.2. Exemple 1 : chemin relatif simple, architecture simple.

J’affiche « comptabilite.html » et je désire afficher « factures.html ».

Parmi les 3 commandes élémentaires ci-dessus, lesquelles dois-je employer ? Seule la 3ème me permet d’obtenir l’affichage voulu : « ouvre le fichier [factures.html]« . (puisqu’ils sont contenus dans le même dossier, pas besoin d’ouvrir un sous dossier ou de remonter dans le dossier conteneur).

Sur un lien HTML, cette commande s’écrit en mettant juste le nom du fichier.

<p><a href="factures.html" title="Factures">Ouvrir les factures</a></p>

2.3. Exemple 2 : chemin relatif, navigation dans l’arborescence.

J’affiche toujours « comptabilite.html ». Maintenant, je désire un lien qui m’ouvre les archives de 1999.

Dans les ordres élémentaires, les ordres :

  • ouvre un dossier[…]
  • ouvre le fichier […]

me sont nécessaires. Je dois d’abord ouvrir le dossier « archives » puis, dedans, ouvrir le fichier voulu : « factures_1999.html ».

On note ceci : nom_du_dossier/nom_du_fichier.

cas concret, dans mon fichier comptabilite.html :

<p><a href="archives/factures_1999.html" title="Factures 1999">Archives : factures 1999</a></p>

Je dois « descendre » d’un dossier (= ouvrir le sous dossier « archives ») puis dedans trouver mon fichier.

Mais, tout visiteur qui aura suivi mon lien affichera désormais factures_1999.html. Ce serait sympa de lui prévoir de quoi revenir à comptabilite.html …

Par rapport à factures_1999.html, il faut « remonter » d’un dossier (pour se retrouver dans documents) puis ouvrir comptabilite.html : cela se note ../nom_fichier.

cas concret, dans mon fichier factures_1999.html :

<p><a href="../comptabilite.html" title="Comptabilité">Comptabilité</a></p>

J’ai jusqu’à présent pris des exemples simples. Il s’agissait de remonter d’un étage ou de descendre à l’étage inférieur (voire rester sur le même palier).

Lorsqu’il y a plusieurs étages à traverser, le principe reste toujours le même : plusieurs étages à traverser, c’est plusieurs fois un étage à traverser ! (cela paraît simple … et c’est simple !)

Maintenant qu’on sait traverser un étage, on sait en traverser plusieurs …

2.4. Arborescence 2

/ = racine du site
|
|-- index.html
|
|-- documents
|	|-- archives
|	|	|-- factures_2000.html
|	|	|-- factures_1999.html
|	|
|	|-- comptabilite.html
|	|-- factures.html
|
|-- autres_fichiers
	|-- pages
	|	|-- accueil.html
	|	|-- horaires.html
	|	|-- contact.html
	|
	|-- images
		|-- logo.jpg
		|-- mail.png
		|-- banniere.swf

Rien d’extraordinaire, j’ai juste rajouté un dossier autres_fichiers, composé de 2 sous dossiers : pages et images lesquels contiennent les fichiers appropriés.

2.5. Exemple 3 : la découverte de l’autre dossier

Cette fois je nous propose un voyage dans l’arborescence … Supposons que le fichier factures_2000.html affiche le logo.jpg …

pour appeler le logo depuis factures_2000.html, voici la marche à suivre (toujours décomposée selon les 3 mouvements initiaux) :

  • Remonter d’un dossier (j’arrive dans « documents/ »)
  • Remonter d’un dossier (j’arrive dans « / »)
  • descendre dans autres_fichiers (j’arrive dans « autres_fichiers/ »)
  • descendre dans images (j’arrive dans « images/ »)
  • ouvrir logo.jpg

Cette étape de décomposition faite, il ne reste plus qu’à écrire le chemin relatif : on remonte de 2 dossiers (2 fois ../) puis on descend dans autres_fichiers (donc autres_fichiers/) puis on descend dans images (donc images/) :

<p><img src="../../autres_fichiers/images/logo.jpg"></p>

Si vous avez compris cet exemple, et surtout cette façon de décomposer les étapes en n fois « petite étape élémentaire » alors les chemins relatifs n’auront plus de secret …

Il suffit juste de retenir les 3 commandes élémentaires citées plus haut ainsi que leur « traduction html », et roulez jeunesse :-).

3. Chemin absolu

Cette fois, c’est vraiment plus simple et plus rapide. L’idée du chemin absolu est de partir d’un point unique, en général la racine du site sur laquelle pointe le nom de domaine. Quel que soit le point de départ dans l’arborescence, il existe toujours un chemin qui part de la racine et qui arrive dans un dossier.

Suite à une habitude, je continue par un exemple.

3.1. Exemple 4 : l’exemple 3 en chemin absolu

Je reprends volontairement le chemin le plus complexe pour montrer la simplicité du chemin absolu (presque déconcertante, après tant d’explications pour le relatif).

Cette fois, on ne se soucie plus du chemin à travers l’arborescence pour aller d’un fichier à un autre, on est dans un fichier, et on exprime le chemin vers l’autre depuis la racine du site. Voilà comment marche le chemin absolu.

En supposant que php-astux.info soit le nom de domaine qui pointe sur la racine (le / en haut de l’arborescence), voici dans n’importe quel fichier ce que je peux mettre pour afficher mon logo :

<p><img src="php-astux.info/autres_fichiers/images/logo.jpg"></p>

Et c’est tout …

4. Chemin relatif ou abolu ?

Ou, reformulé autrement, dans quelles conditions utiliser l’un ou l’autre ?
Voyons leurs avantages et inconvénients.

Chemin Relatif :

  • Avantages :
    • Si le site change de nom de domaine, pas de modifications à faire
    • On n’a pas à se soucier de la position de la racine du site
  • Inconvénients :
    • Si l’arborescence est mal pensée, cela peut faire faire pas mal de gymnastique d’esprit
    • Toujours décomposer en déplacements élémentaires …
    • Erreur 404 si le fichier n’est pas au bon endroit
    • Ne permet que de se déplacer dans une même arborescence

Chemin Absolu :

  • Avantages :
    • Adresse directe, quel que soit le fichier d’origine
    • Permet d’accéder à une ressource sur un autre nom de domaine, un autre site …
  • Inconvénients :
    • Si on se sert du nom de domaine, en cas de changement de celui-ci, tous les chemins sont à réediter

Maintenant que vous avez les principaux avantages et inconvénients, utilisez ce qui vous semble le plus adapté …

Attention, pour des raisons évidentes de sécurité, l’accès à des ressources sur un autre nom de domaine en chemin absolu est très limité … Par exemple, vous ne pourrez pas faire <?php include(‘http://www.site.com/mysql/connexion.php’); ?>, car vous auriez accès à sa base de données, ce qui n’est évidemment pas pensable.