txt qui va, php qui ne va pas

page 1 page 2
Répondre
croco
croco
Déconnecté
Tout d'abord bonjour, puisque je viens de m'inscrire.

Pour essayer de faire bref :
j'ai des problèmes avec des fichiers "cibles" xxx.php, alors qu'en le nommant xxx.txt le problème n'apparait pas.
Exemple :
Dans un fichier index.php, accompagné de fichiers css, plusieurs éléments sont appelés, tels que :

  1. <?php
  2. $url=$_SERVER["HTTP_HOST"];  
  3. $chemin_racine="http://".$url."";  
  4. ?> 

(ça c'est pour que vous sachiez ce que représente $chemin_racine)

  1. <?php include $chemin_racine."/site/sommaire.php"; php ?> 


Le problème apparait si dans le code passé par "include" j'ai besoin de récupérer une variable $_SESSION['blabla"], car la session (ouverte, bien sûr) se perd en route : vérification faite, la variable est vide.

Autre exemple, dans un élément de page chargé dans les mêmes conditions servant à fermer une session, la fonction session_destroy(); renvoie un message indiquant que je cherche à fermer un session qui n'existe pas.

Or, si je renomme ces fichiers en .txt (sommaire.php pour le premier exemple), tout rentre dans l'ordre, sans rien changer au contenu.
COmme il s'agit d'include - c'est-à-dire sauf erreur rien d'autre qu'une sorte de copier/coller automatique, je ne comprends pas et ne parviens pas à trouver la solution.

Si je " m'amuse " à faire depuis ma page d'index un include sur une partie nommée en .txt et une autre en .php, les deux affichant par exemple le pseudo de la session ouverte, la partie txt affiche le pseudo, la partie php reste muette.

Et, ça me gène de laisser des fichiers .txt dont le contenu est édité si on met leur chemin exact en url.

J'ai l'impression de tourner autour d'un truc évident, mais je ne trouve pas.

Merci d'avance si quelqu'un peut m'aider.
Astyax69
Astyax69
Déconnecté
Salut,
est-ce que sur ta page sommaire.php tu as mis session_start() au début ? Si c'est pas le cas, rajoute-le et vois si ça marche
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Pour faire des include de fichiers PHP, n'utilise pas le chemin à partir du chemin "web" (http://), mais utilise le chemin à partir du système de fichier du serveur.

Exemple, si tu as à la racine de ton site :
index.php
dossier_blublu/toto.php

Si tu es dans index.php, tu peux faire (lien relatif) :
include ('dossier_blublu/toto.php');

Ou bien (lien absolu) :
include('/home/toto/blu/a/dossier_blublu/toto.php');

Et pour connaitre le chemin /home/toto/blu/a/ (ben oui, j'ai mis une connerie la, mais c'etait pour l'exemple), tu peux faire un echo $_SERVER['DOCUMENT_ROOT'] dans ton index.php (pour récupérer la valeur du chemin sur le server de l'index de ton site).
Et une fois que tu connais ce chemin absolu, ben colle le dans une variable, et fais tous tes include en absolu :

include ($chemin_absolu.'/dossier_blublu/toto.php');
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Je rajouterais en complément à La Globule, qu'il est à proscrire l'inclusion de fichiers Web directement sans rien vérifier (sinon, attention au phishning ;) ), et qu'il vaut mieux utiliser des noms de chemin absolus, même si ce n'est pas forcément très souple comme solution.
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Je rajouterais en complément à La Globule, qu'il est à proscrire l'inclusion de fichiers Web directement sans rien vérifier (sinon, attention au phishning ;) )


Completement :)
croco
croco
Déconnecté
Merci pour les conseils, je vais vérifier.

Mais, avez-vous l'explication sur le fait que ce qui bloque en .php passe en .txt, dès lors que l'on utilise une adresse en url plutôt qu'en local ? (par curiosité)

Pour session_start, oui, j'ai essayé avec et sans, ça ne change rien (au demeurant, s'agissant d'un include, l'important n'est-il pas que le session-start soit dans le fichier qui appelle l'include ?)
croco
croco
Déconnecté
Vérification faite, ça ne résoud pas mon problème.

Je vais tout de même passer de $_SERVER["HTTP_HOST"] à $_SERVER['DOCUMENT_ROOT'] parce que c'est plus propre, mais si je remplace les .txt par .php, j'ai toujours ma $_SESSION['machin'] qui s'évapore !
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Si elle s'evapore, c'est que tu oublies quelque part un session_start ou bien que tu as un session_destroy ou un unset($_SESSION) ou un truc qui la tue quoi.
croco
croco
Déconnecté
ben non, si c'était le cas que le fichier s'appelle toto.txt ou toto.php ça ne changerait rien.
croco
croco
Déconnecté
Peut-être faut-il poser mon problème autrement :

y a-t-il dans PHP, une fiddérence de traitement selon qu'un fichier a l'extension php ou l'extension txt, pour un contenu strictement identique ?
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Il y a une différence de traitement, le PHP est interprété par PHP... pas compris mon allusion ?

Bon, on va expliquer.
appelant.php
  1. <?php
  2. include("http://toto.com/appele.php") ;  
  3.  
  4. session_get('tata') ;  
  5. ?> 


inclus.php
  1. <?php
  2. session_start()  
  3. ?> 


session_get('tata') ne trouvera jamais la variable de session, car la session n'a pas été chargée. Car le include inclue ce qui est issu de inclus.php déjà interprété.

Enfin bref, ta manière de faire n'est pas propre, mais scandaleuse et franchement dégueulasse ;)
Astyax69
Astyax69
Déconnecté
Enfin bref, ta manière de faire n'est pas propre, mais scandaleuse et franchement dégueulasse


Dis donc Lupus, quand tu charges la mule, tu l'as charge pas à moitié... Excellent esprit de synthèse également... Bien drôle en tous cas :)
croco
croco
Déconnecté
Soit.
Et pour que la pédagogie soit constructive, quelle est la manière propre ?

Cela signifie-t-il qu'il n'est pas possible d'avoir dans un fichier .php inclus du code comportant des variables $_SESSION ?
Réponse interdite : "t'as qu'à mettre un session_start dans les fichiers inclus". Ca, comme je l'ai écrit, j'ai déjà essayé sans résultat.

A lire ce qu'a écrit Lupus, j'en déduis que nombre d'informations sur le PHP sont incomplètes (voire, pas propre, mais scandaleusement etc), puisque contrairement à ce que j'ai lu en divers endroits, include n'est pas qu'un copier/coller de code mis ailleurs.
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Si justement, include, c'est un copier coller de code.

Si tu as un :

toto.php
  1. <?php
  2. session_start();  
  3. $_SESSION['blu'] = 3;  
  4. ?> 


et :
index.php
  1. <?php
  2. include ('toto.php');  
  3. echo $_SESSION['blu'];  
  4. ?> 


Tu verras ton 3 qui s'affiche.
i M@N
i M@N
Déconnecté
One Love, One Heart, One Unity.
Hello !

Le problème aussi vient du fait qu'on a pas le code.
Si Croco faisait un wall avec le code de tous les fichiers impliqués, on verrait bien mieux où se situe le problème ... là on se base sur une description d'un code, quelques extraits et beaucoup de suppositions.

@+...
page 1 page 2
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog