php probleme avec include et chemin relatif

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

php probleme avec include et chemin relatif

Message par kifffkifff »

Bonjour,

j'utilse un modele de page php qui est le suivant :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<?php include('/styles/menu.php'); ?>
<?php include("include/menu.php"); ?>
<title><?php echo htmlentities($titre)?></title>

<?php echo '<base href="http://'.$_SERVER['HTTP_HOST'].'/" />';?>

<link href="styles/menu.css" rel="stylesheet" type="text/css" />
<link href="styles/contenu.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javascript" src="scripts/menu.js"></script>
	
</head>

<body onload="start();">
	<div id="curseur" class="infobulle"></div>
	<?php echo('<?php include("include/contenu.php"); ?>'); ?>
	<?php include('http://'.$_SERVER['HTTP_HOST'].'/scripts/buildMenu.php'); ?>
</body>	
</html>
il y a plusieurs includes, certains font référence à la racine du site (ceux avec $_SERVER['HTTP_HOST'] et d'autres sont des chemins relatifs à la page. J'ai donc différents sous-dossiers avec des pages qui includent ce modèle. Le problème c'est que les liens relatifs le sont par rapport à modele.php et non la page qui les include. Je n'en vois pas le bout, quelqu'un pour m'aider ?

Merci ;)

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Wronschien
Lézard à collerette
Messages : 253
Inscription : 08 mai 2004, 22:48

Message par Wronschien »

j'ai eu un problème similaire il y a peu et Benoit m'a donné la solution ici-même, http://www.geckozone.org/forum/viewtopi ... 184#301184

il te suffit donc de créer une variable contenant le chemin du fichier en cours avant l'inclusion du modèle, pour l'utiliser dans celui-ci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

variables chemin

Message par kifffkifff »

Salut et merci pour ta réponse.

Je n'y arrive toujours pas. En testant simplement avec ça :

fichier que j'appelle par le navigateur :

Code : Tout sélectionner

<?php $path = './'; ?> 
<?php include('http://'.$_SERVER['HTTP_HOST'].'/scripts/modele.php'); ?>
fichier modele.php qui est inclut:

Code : Tout sélectionner

<?php echo $path; ?>
Il ne m'affiche pas $path; Du coup je vois pas comment faire...

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Je pense que tu ne peux pas inclure de fichiers distants (http). Ils doivent probablement être sur le serveur directement (donc, chemin relatif à mettre comme paramètre de l'include) :wink:

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.2) Gecko/20070220 Firelimace Firefox/2.0.0.2
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

Message par kifffkifff »

donc le probleme viendrait de HTTP_HOST ? Je vais essayer je vous tient au courant. Merci ;)

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

Message par kifffkifff »

Comment faire pour pointer vers la racine du site sans HTTP_HOST ? Car toutes mes pages ne sons pas au même niveau.

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

La racine c'est /

Code : Tout sélectionner

include('/chemin/absolu/vers/le/scripts/modele.php'); ?>
Attention, la racine de ton site n'est pas forcément la racine de l'arborescence du serveur.
Cela dit, s'ils sont un niveau en-dessus, un simple ../ (ou deux, etc.) ira tout aussi bien :wink:

Cela dit, je pense que tu compliques inutilement. Mais je peine à voir la structure de ton site, je dois avouer :? Pourquoi as-tu éparpillé tes fichiers ? :roll:

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.2) Gecko/20070220 Firelimace Firefox/2.0.0.2
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

Message par kifffkifff »

En fait mon problème c'est que le site ne sera pas hébergé à la racine, mais dans un dossier... Donc en local avec MAMP les liens ne sont pas au même niveau. Enfin je pourrais toujours configurer MAMP en local avec ce sous dossier mais je cherche à comprendre au delà de ça.

Image

Les catégories sont en vert. J'ai pris comme exemple la catégorie (rubrique) "welcometo". La page qu'on appelle par le navigateur est "welcometo.php", qui include /script/modele.php. Et modele.php donne des instructions pour inclure /script/buildmenu.php, /script/menu.js et /[rubrique en cours]/include/contenu.php et /[rubrique en cours]/include/menu.php (ici rubrique en cours est welcometo).
Les dossiers /medias contiennent les images de chaque rubrique.

Voilà

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Alors tu dois plus que probablement utiliser des chemins relatifs plutôt que des chemins absolus.

./ pour le répertoire courant
./sousrepertoire/ pour un répertoire enfant
../ pour le répertoire parent
../autre/ pour un autre répertoire au même niveau
../../ pour remonter de deux niveaux

et ainsi de suite.

Ou alors tu définis le répertoire racine en tout début de fichier et tu le modifies lorsque tu déplaces la structure, mais c'est moins pratique.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

Message par kifffkifff »

Merci Benoit. Apparement l'image ne s'affiche pas. Elle est dispo à l'adresse suivante :
http://alexandreleray.com/misc/arborescence.png

Le problème c'est que j'aimerai utiliser le même code pour toutes les pages, quelque soit leur niveau dans l'arborescence. Voilà pourquoi j'aimerai me passer de chemins relatifs.


Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

C'est vachement compliqué, en gros tu veux le beurre et l'argent du beurre.

Je ne vois qu'une possibilité c'est de mettre un fichier texte de configuration différent dans chaque répertoire sur ton serveur et en local, qui indique la racine du site. Après, dans tous tes scripts tu vas lire ce fichier et tu ajoutes la partie relative derrière.

Mais franchement tu ferais mieux de réorganiser tes fichiers d'une manière plus cohérente. Ou d'abandonner tout à fait la notion de répertoires et utiliser un contrôleur à la racine (style index.php?rubrique=welcometo) qui construira les inclusions programmatiquement. Ou utiliser un CMS tout fait qui fera tout ça à ta place.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
kifffkifff
Salamandre
Messages : 23
Inscription : 15 sept. 2005, 13:55

Message par kifffkifff »

Comme je débute en PHP je ne connais pas grand chose... Ce truc à l'air de marcher :

Code : Tout sélectionner

<?php include($_SERVER['DOCUMENT_ROOT'].'/scripts/modele.php'); ?>
sinon avec "define" pour avoir une variable globale. Comment ça marche les requetes ? Faut une base de données non ? sinon peut d'interet ?

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

kifffkifff a écrit :sinon avec "define" pour avoir une variable globale. Comment ça marche les requetes ? Faut une base de données non ? sinon peut d'interet ?
La base de donnée est une des options, mais tu peux également simplement inclure des fichiers contenant le code HTML.
Si tu choisis l'option base de données, je "plusse" avec Benoit pour te conseiller l'utilisation d'un outil dédié, CMS ou Wiki selon tes besoins :wink:
wallynet

Re: php probleme avec include et chemin relatif

Message par wallynet »

pour ça, je fait toujours la même chose :
à la racine de "mon" site (qui donc est la même que je sois en local ou sur un hébergeur), j'ai toujours un dossier _include qui contient les fichiers de code commun. je peux avoir d'autres _include ailleurs, mais il n'y en a qu'un qui a le fichier de connexion...(je protège le dossier par .htaccess, comme ça je suis tranquille, et ça ne nuit pas aux include() et autres require_once())
Alors pour trouver le chemin relatif de ma racine, je fais toujours le calcul :

Code : Tout sélectionner

if (!isset($_WyN_root)) for( $_WyN_root=''; !is_file($_WyN_root."_include/connexion.php"); $_WyN_root.='../') ; // pour retrouver la base du site (inséré dans toutes les pages pour les tests des scripts soit directs, soit par ?page= )
D'accord, un define serait mieux... mais ça ne change rien au principe.
Comme ça je peux utiliser le même code en local et sur l'hébergeur et que je face un site où la navigation est du genre index.php?page=dos1/dos2 ou du genre dos1/dos2/index.php (où dans ce cas le index.php est un lien symbolique sur celui de la racine ou autre chose)
Bien sur je préfèrerai trouver la valeur mise dans <base href="cheminrelatif" /> mais j'ai pas trouvé.
D'autre part, un include sur un http:// ça exécute le script qui est demandé à inclure avant de l'inclure : ce n'est plus que du html, il ne contient plus de variables php... sauf si le script en question génère en fait un flux qui contient des chaines de caractères qui sont en fait du php : par exemple un script qui génère

Code : Tout sélectionner

<?php echo "coucou"; ?>
, et pour faire ça il serait du genre :

Code : Tout sélectionner

<? echo '<?php echo "coucou"; ?>'; ?>

voir
http://bfricottin.free.fr/essais-free/m ... ni_inc.php
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.13) Gecko/20060414
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités