Récupérer le chemin relatif d'un objet par rapport à la racine du site.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 177 fois - Téléchargée 17 fois

Contenu du snippet

Cette fonction a été réalisée dans le but de récupérer le repertoire où elle se trouve par rapport à la racine du site.

Cette fonction faisant parti d'un objet complet appelé depuis la page index.php du site, il devenait difficile de faire des include dans cet objet.

cas_concret :
un site avec un objet appelé depuis index.php à la racine du site, contenant la fonction setChemin() et caché au fin fond d'une arborescence comme par exemple :
"libs/mes_objets/mon_objet.class.php".

Comment faire afficher par cet objet une image qui se trouve par exemple dans :
"libs/mes_objets/dossier_image/" ?

Sans cette fonction, il suffirait d'écrire dans le code de l'objet :
echo '<img src="libs/mes_objets/dossier_image/mon_image.mon_extension" alt=""/>';

Maintenant, si un utilisateur décide de déplacer cet objet !
Le chemin inscrit précédemment ne sera plus bon.

Alors qu'avec cette fonction, le chemin s'écrira :
echo '<img src="'.$chemin_repertoire.'/dossier_image/mon_image.mon_extension" alt=""/>';

Voilà.

Source / Exemple :


<?php
/** Appel de la fonction 
@parmetre_requis : le chemin du fichier depuis lequel la fonction est appelée donc la constante magique __file__

  • /
setChemin(__FILE__); function setChemin($chemin_fichier_appelant) { /** @creator : Fred @php_version : 5.3.x
  • /
/** Récupération du chemin du fichier courant. */ $chemin_fichier_courant = __FILE__; /** Explosion des chaines du chemin du fichier d'appel*/ $explode_chemin_courant = explode("\\", $chemin_fichier_courant); /** Explosion des chaines du chemin. */ $explode_chemin_appelant = explode("\\", $chemin_fichier_appelant); /** Récupération des valeurs du chemin du fichier appelant */ $valeur_chemin_fichier_appelant = array_values($explode_chemin_appelant); /** Récupération des valeurs du chemin du fichier courant. */ $valeur_chemin_fichier_courant = array_values($explode_chemin_courant); /** Comparaison des deux chaines*/ $comparaison_chemin = array_diff($valeur_chemin_fichier_courant, $valeur_chemin_fichier_appelant); /** Chemin d'accès. */ $chemin_acces = implode("/", $comparaison_chemin); /** Calcul du nombre de chaine dans le chemin du fichier courant. */ $nb_chaine_chemin_courant = count($valeur_chemin_fichier_courant); /** Retrait du nom du fichier courant afin d'obtenir le chemin d'accès depuis la racine du site. */ $chemin_repertoire = str_replace($valeur_chemin_fichier_courant[$nb_chaine_chemin_courant-1], "", $chemin_acces); /** Ajout des symboles ./ (point et slash). */ $chemin_repertoire = "./".$chemin_repertoire; /** Retour de la fonction. */ return $chemin_repertoire; /** Et voilà, la récupération du répertoire dans lequel se trouve le fichier courant est remonté. */ } ?>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
vendredi 30 janvier 2009
Statut
Membre
Dernière intervention
12 novembre 2009

Bonjour.

Effectivement avec __FILE__ c'est mieux mais ça fonctionne aussi avec __file__.

Je n'ai pas testé sous Linux.

Concernant le remplacement des antislash par des slash, je n'en ai pas le besoin.
Le __file__ appelant et le __file__ courant sont explosés en chaines séparées sans antislash et
c'est la fonction implode qui se charge de rajouter les slash.
Messages postés
97
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
24 février 2012

Salut

Attention, en regardant en diagonale, je vois un petit bug :

__file__

devrait être :
__FILE__

As-tu testé ton astuce sous Linux ?

J'aurais remplacé mes anti slash par des slash :

$chemin_fichier_courant = str_replace('\\', '/', __FILE__);

A tester...
A+
Messages postés
2
Date d'inscription
vendredi 30 janvier 2009
Statut
Membre
Dernière intervention
12 novembre 2009

Bonjour.
En fait, il faut considérer cette fonction comme faisant partie d'un objet qui comporte une autre fonction avec par exemple un echo '';

J'appelle cet objet depuis index.php et ma fonction se trouve dans libs/mes_objets/mon_objet.class.php.
Dans ce même objet, j'ai besoin d'insérer une image qui se trouve dans libs/mes_objets/common_image/.

Mon objet étant appelé depuis la racine, si je n'ai pas le chemin relatif vers mon image (./libs/mes_objets/common_image/), index.php va chercher l'image dans ./common_image/ et forcement, il ne la trouvera pas.

J'espère avoir été assez clair.
Messages postés
6
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
9 novembre 2009

Bonjour Fred,

Ton idée est fort intéressante, mais je ne suis pas sûr d'avoir bien tout compris.

Voila ce que j'ai compris.


function setChemin($chemin_fichier_appelant)
{
. . .
}

$chemin_repertoire = setChemin(__file__);
echo '';

Est-ce cela ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.