Page 1 sur 1

portée des variables, constantes, include

Posté : 14 oct. 2005, 17:43
par geve
Je deviens chèvre... :(
J'ai lu et relu les explications concernant la portée des variables dans différentes situations et je coince sur un truc. Si qq peut m'aider, cela m'évitera de perdre la tête sur ce qui est probablement une c...rie de ma part.

Alors, voilà :
1. Je définis une constante dans un premier fichier appelé parametres.php

Code : Tout sélectionner

define("RACINE","http://www.monsite.com");
2. Dans un second fichier nommé menu.php, je crée un lien de ce type :

Code : Tout sélectionner

<a href="<?php print RACINE; ?>formations/filieres.php">FILIERES</a>
3. Dans une page de mon site, nommée page.php, j'appelle par include les deux fichiers précédents dont j'ai besoin :

Code : Tout sélectionner

include("parametres.php"); <html>blablabla.... <?php include(RACINE."menu.php"); ?> </html>
(J'ai simplifié pour les balises HTML mais elles y sont toutes, no problem).

Normalement, la constante RACINE devrait être remplacée par sa valeur dans le fichier page.php mais aussi dans le fichier menu.php. Or, dans tous mes tests, le mot RACINE s'affiche en dur à la place de sa valeur dans l'inclusion du fichier menu.php. Tout se passe comme si cette constante n'avait pas la portée suffisante pour être reconnue dans menu.php.
Si je redéclare RACINE comme constante dans page.php, là cela fonctionne. J'avais pourtant cru comprendre qu'un bout de code amené par un include était lu et interprété exactement comme s'il était dans le fichier qui l'a appelé.
Il y a un concept qui m'échappe et qui bien sûr, me fout tout le reste en l'air.
Quelqu'un peut-il m'expliquer ce que je ne pige pas, please ?

Posté : 14 oct. 2005, 17:47
par zeus
est-ce que tu as bien le include("parametres.php") dans menu.php ? On ne le voit pas mais je ne sais pas si c'est par oubli ou par omission pour la lecture

portée dans des include

Posté : 14 oct. 2005, 19:10
par geve
Ben non... Je fais un include pour paramètres et un include pour menu, dans page.php. Donc, le contenu de ces deux fichiers est présent dans page.php.
Logiquement, je ne devrais pas appeler une nouvelle fois paramètres dans le menu, sinon je vais l'incorporer deux fois ???

Posté : 14 oct. 2005, 19:12
par zeus
est-ce que le include("parametres.php") et bien avant le include("menu.php") ?

Parce qu'il me semble que le fichier sont exécutés au moment de l'inclusion

ordre des includes

Posté : 14 oct. 2005, 19:24
par geve
Oui, J'ai bien fait un include de parametres en premier. D'ailleurs comme test, je met le code suivant :

Code : Tout sélectionner

print RACINE;
dans page.php et je vois bien la valeur s'afficher. La constante est donc bien chargée dans page.php.
Par contre, si je fais ce même test de print dans menu.php, la constante n'est pas définie. Comme si elle restait locale à page.php. Je précise que j'appelle mes include à partir du chemin absolu de mon site.
ex :

Code : Tout sélectionner

include("http://www.monsite.com/php/parametres.php");
Je suis obligé de faire cela car j'utilise mes fichiers include dans différents dossiers du site (toutes les pages de mon site sont montées morceau par morceau, par des include, ce qui est très classique je crois.

En résumé, le problème que je rencontre, c'est que les variables utilisées dans les fichiers appelés par des include semblent se comporter comme si elles étaient locales aux morceaux de fichiers insérés par includes. J'espère que je suis clair ?

Re: portée des variables, constantes, include

Posté : 14 oct. 2005, 19:28
par zeus
Essaye ça pour voir.

Je n'ai jamais mis de constantes dans un header et il est possible que ça vienne de là
include("parametres.php");
<html>blablabla....
<?php 
  $fichier = RACINE"menu.php";
  echo $fichier;
  include($fichier); ?>
</html>

Re: portée des variables, constantes, include

Posté : 11 févr. 2013, 13:20
par OM_H
Salut. À mon avis, ton problème est celui de la session: si tu démarres le premier fichier de ton environnement par

Code : Tout sélectionner

session_start();
la portée de tes constantes s'étendra à tous les includes, et même, aux nouveaux scripts si eux aussi débutent par "session_start();". Et si ça vaut le coup dans ton contexte tu pourras aussi définir des variables de session sous la forme

Code : Tout sélectionner

$_SESSION['ma_variable'] = <valeur>
réutilisables dans tous les includes et scripts de la session, genre

Code : Tout sélectionner

<p>Salut, <?php echo $_SESSION['user_first_name'].' '.$_SESSION['user_last_name'] ?>.

Re: portée des variables, constantes, include

Posté : 11 févr. 2013, 16:22
par xTG
Le souci vient de ton chemin absolu.
Il interprète le PHP et tu n'inclus que le HTML résultant comme si tu faisais un include d'un site distant.

Pourquoi d'ailleurs utiliser un chemin avec le protocole http ?
Utilises un chemin à partir de la racine de ton filesystem plutôt.

Re: portée des variables, constantes, include

Posté : 12 févr. 2013, 14:06
par zeus
euh ... vous avez vu que le message date de 2005 ?

Re: portée des variables, constantes, include

Posté : 12 févr. 2013, 20:26
par schim59
lol !