OVH Cloud OVH Cloud

transmission de variables a travers include s

6 réponses
Avatar
F.G.
Bonsoir!
mon modele de page =
include ("/home/xxx/www/includes/paths.php");
include ("/home/xxx/www/includes/head.php");
include ("/home/xxx/www/includes/corps.php");
include ("/home/xxx/www/includes/pied.php");

les cvariables recuperees dans le premier include
ne sont pas vues par les
autres fichiers includes

quelle est l'explication
et surtout quelle est la solution ?

Merci !

6 réponses

Avatar
Olivier Miakinen

include ("/home/xxx/www/includes/paths.php");
include ("/home/xxx/www/includes/head.php");
include ("/home/xxx/www/includes/corps.php");
include ("/home/xxx/www/includes/pied.php");

les variables recuperees dans le premier include
ne sont pas vues par les autres fichiers includes


J'ai du mal à le croire. Ce ne serait pas plutôt qu'elles ne sont pas
vues par les *fonctions* définies dans les autres fichiers inclus, faute
de les avoir rendues visibles par « global » ?

quelle est l'explication
et surtout quelle est la solution ?


Si mon idée n'était pas la bonne, tu vas devoir nous montrer un exemple
de code qui ne marche pas.

Avatar
Thief13

include ("/home/xxx/www/includes/paths.php");
include ("/home/xxx/www/includes/head.php");
include ("/home/xxx/www/includes/corps.php");
include ("/home/xxx/www/includes/pied.php");

les variables recuperees dans le premier include
ne sont pas vues par les autres fichiers includes


J'ai du mal à le croire. Ce ne serait pas plutôt qu'elles ne sont pas
vues par les *fonctions* définies dans les autres fichiers inclus, faute
de les avoir rendues visibles par « global » ?

quelle est l'explication
et surtout quelle est la solution ?


Si mon idée n'était pas la bonne, tu vas devoir nous montrer un exemple
de code qui ne marche pas.


Vérifie que tu ne les réassigne pas dans un autres fichier que tu inclu,
ou dans un teste d'égalité (= au lieu de ==) ça m'est déjà arrivé...

En plus, si ce sont des variable qui sont sensé contenir des chemis vers
des fichiers, il vaux plutot mieux que tu utilise de constante pour etre
sur de ne pas te les faire modifier d'une manière au d'une autre par
l'utilisateur.


Avatar
Olivier Miakinen

[...] il vaux plutot mieux que tu utilise de constante pour etre
sur de ne pas te les faire modifier d'une manière au d'une autre par
l'utilisateur.


Très juste. D'une manière générale, et surtout entre d'un include() à un
autre, utiliser des constantes pour ce que ne changera effectivement pas
est une excellente idée. De plus, elles seront automatiquement visibles,
même dans les fonctions.

Avatar
F.G.
[...] il vaux plutot mieux que tu utilise de constante pour etre
sur de ne pas te les faire modifier d'une manière au d'une autre par
l'utilisateur.


Très juste. D'une manière générale, et surtout entre d'un include() à un
autre, utiliser des constantes pour ce que ne changera effectivement pas
est une excellente idée. De plus, elles seront automatiquement visibles,
même dans les fonctions.



Merci pour ces réponses avisées
Mon problème vient du fait que je fait un include absolu avec :
include ("http://www.xxx.com/includes/chemins.php
meme si xxx.com est mon site, ça eh bien l'inclusion n'est pas
satisfaisante ...


Avatar
Olivier Miakinen

Mon problème vient du fait que je fait un include absolu avec :
include ("http://www.xxx.com/includes/chemins.php
meme si xxx.com est mon site, ça eh bien l'inclusion n'est pas
satisfaisante ...


Ben oui, c'est logique. Lorsque tu passes par une requête HTTP pour
inclure ton fichier, ça lance une deuxième instance de l'interpréteur
PHP appelé par Apache (ou tout autre serveur httpd), et tu inclus le
résultat de l'exécution, non pas le code source. Si tu voulais que ça
marche comme ça, il faudrait que chemins.php donne en sortie non pas du
HTML, mais un deuxième niveau de PHP !

Par exemple, ce serait un truc comme ça :

<?php
echo "<?phpn";
echo ...
...
echo "?>n";
?>

Pas très facile à maintenir, et qui plus est pas très malin si tes
variables contiennent des mots de passe ou autres données sensibles.

Avatar
Thief13
Merci pour ces réponses avisées
Mon problème vient du fait que je fait un include absolu avec :
include ("http://www.xxx.com/includes/chemins.php
meme si xxx.com est mon site, ça eh bien l'inclusion n'est pas
satisfaisante ...


C'est sur que include ("/home/xxx/www/includes/paths.php"); de ton
premier post et include ("http://www.xxx.com/includes/chemins.php");
n'ont strictement rien à voir, le premier ouvre le fichier directement
sur le serveur et le deuxieme l'execute et révupère la sortie...