Pb de chemin dans les includes

debutant
Invité n'ayant pas de compte PHPfrance

22 mars 2007, 20:02

Bonjour j'aurais besoin de vos lumieres
Je fais un site en php dans lequel j'ai mis un menu ! Jai inclus ce menu dans mes pages avec un include classique
Mais j'ai une arborescence telle qu'elle
La racine ou jai mon index
Et un sous repertoire : page ou jai toutes mes autres pages dont le menu

Seulement vu que le include inclus tout le code quil y a ds ma page menu, jai quand je passe à mon fichier index un pb dans les liens dans mon menu puisqu'au lieu detre comme ceci : pages/monfichier.php ils deviennent ainsi monfichier.php donc forcement ils ne marchent plus ! Comment puis je faire pour corriger ce pb qui est tres chiant !

Eléphant du PHP | 445 Messages

22 mars 2007, 20:43

Bonjour,

Tu peux par exemple mettre ton index dans le même dossier que tes pages.

Ou encore faire un deuxième fichier, le même, mais avec les bons liens, à la racine.

Ou même faire une condition dans ton fichier, qui rajoute ou non le chemin du dossier pour les liens.
LLDC
Ulti

ViPHP
ViPHP | 2291 Messages

22 mars 2007, 21:18

Bonjour j'aurais besoin de vos lumieres
Je fais un site en php dans lequel j'ai mis un menu ! Jai inclus ce menu dans mes pages avec un include classique
Mais j'ai une arborescence telle qu'elle
La racine ou jai mon index
Et un sous repertoire : page ou jai toutes mes autres pages dont le menu

Seulement vu que le include inclus tout le code quil y a ds ma page menu, jai quand je passe à mon fichier index un pb dans les liens dans mon menu puisqu'au lieu detre comme ceci : pages/monfichier.php ils deviennent ainsi monfichier.php donc forcement ils ne marchent plus ! Comment puis je faire pour corriger ce pb qui est tres chiant !
Et pourquoi pas mettre simplement le chemin complet
http://monsite/monfichier.php :?:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

debutant
Invité n'ayant pas de compte PHPfrance

23 mars 2007, 00:03

jai bien évidemment penser à faire un double de fichiers du menu , cest ce que jai fait pour le moment mais apres pour le modifier & compléter cest tt un bordel , idem en lui mettant direct ladresse de lhebergeur devant vu qu'apres en local jpeux plus bosser !

Par contre j'arrive pas à voir comment je peux faire la condition if pour le chemin de dossier que tu me proposes ! :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mars 2007, 16:49

Quitte à mettre un chemin absolu, fais le partir de la racine du site sans spécifier le nom de domaine :

Code : Tout sélectionner

/dossier/monfichier.php
Cela devrait fonctionner en local également.

Pour la condition, tu peux tester le nom et le chemin du fichier qui inclu le menu avec la variable $_SERVER['PHP_SELF']. Tu peux par exemple utiliser dirname() pour ne récuperer que le nom du dossier et ainsi vérifier si tu es à la racine ou pas :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

24 mars 2007, 00:52

merci je vais essayer avec dirname sinon pour ce que tu mas dit avt si je le fais à partir de la racine, apres ds mes fichiers presents ds mon ss repertoire et dans lequel le menu va sinclure les liens du menu seront mauvais vu quils auront un lien ds un autre ss repertoire qui nexiste pas :?

débutant
Invité n'ayant pas de compte PHPfrance

25 mars 2007, 14:59

Jai essayé de faire avec dirname mais ca ne marche pas hélas

Jai donc fait :
<?PHP
//si je suis dans le sous repertoire "pages"

if ( dirname ('pages/')){
	
echo '<ul><li><a href="candidats.php">candidats</a></li>
<li><a  href="resumes_index.php">resumés</a></li></ul>';
}
			
// Ou si je suis "à la racine" j'affiche 
elseif(dirname ('.')){
echo '<ul><li><a href="pages/candidats.php">candidats</a></li>
<li><a  href="pages/resumes_index.php">resumés</a></li></ul>';
}
?>
Ca ne change rien dans mon menu le changement ne se fait pas ! merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mars 2007, 15:42

Euh.... as-tu bien compris à quoi servait la fonction dirname() ?

L'idée, c'est depuis ton menu, récupérer le nom du fichier qui l'inclue (et accessoirement son chemin) pour savoir s'il se trouve dans le dossier pages ou pas... Je vois pas d'appel à $_SERVER['PHP_SELF'] dans ce que tu as fais.. quant à appeller la fonction dirname() directement sur un dossier, il y a de grande chance pour qu'elle te retourne toujours le nom du dossier ;)

Ajoute ceci dans ton menu, et regardel a valeur qu'il prend selon qu'il est appellé par ta page principale ou l'une de celles du dossier page :
echo "Valeur : " . dirname($_SERVER['PHP_SELF']);
Essaye à partir de la d'établir une règle pour distinguer ces deux cas :)


Quant au chemin absolu, dans une url le "/" correspond à la racine du site, c'est à dire le domaine :
http://www.monsite.fr/dossier/page.php
Ainsi, si ton lien est /dossier/page.php, que celui-ci soit lu affichée par une page qui se trouve à la racine, ou dans n'importe quel sous-dossier, il ouvrira toujours la page page.php qui se trouve dans le répertorie "dossier" placé à la racine du site :)

Nota : quand on travail sur le système de fichier, le "/" correspond à la racine du disque dur du serveur.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

debutant
Invité n'ayant pas de compte PHPfrance

25 mars 2007, 17:37

ok merci je vais essayer

Invité
Invité n'ayant pas de compte PHPfrance

25 mars 2007, 19:11

Merci cest bon j'ai reussi apres avoir bataillé une bonne heure

en faisant cela : (PROJETS étant ma racine)
if (dirname($_SERVER['PHP_SELF']) == ('/PROJETS')){

echo '<ul><li><a href="pages/candidats.php">candidats</a></li> 
<li><a  href="pages/resumes_index.php">resumés</a></li></ul>'; 
} 

else{

echo '<ul><li><a href="candidats.php">candidats</a></li> 
<li><a  href="resumes_index.php">resumés</a></li></ul>'; 
}