Fonction include de variables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction include de variables

par agité » 10 janv. 2008, 14:39

Bon j'ai fais un truc de barbare surement, mais qui marche :

Code : Tout sélectionner

include($_SERVER["DOCUMENT_ROOT"].$_SESSION['Base_url']."/_includes/php/session.php");
J'utilise donc document_root + ma variable de session

comme ca je n'ai aucune page a changer, juste 2 lignes de code

peut être que cela servira a d'autres et que ce n'est pas trop barbare.

je met [Résolu].

merci pour votre aide

par Berzemus » 10 janv. 2008, 14:01

un config.php volage ? Je ne vois vraiment pas l'intérêt, je dois dire..

par agité » 10 janv. 2008, 13:54

si tu changes d'hébergeur alors tous tes liens (j'ai bien dis TOUS) seront à changer :)

Et puis le principe même du config.php et qu'il ne doit pas bouger (puisqu'il défini le répertoire racine)
Justement dans l'utilisation de mon $_SESSION['Base_url']

rien n'est a changer et cette methode marche pour tout les liens de mon site :

- images
- liens


mais par contre il me perds les variables de sessions, et c'est ce probleme que je compte resoudre peut être que je n'ai pas été clair dans mes messages precedents, je pensais avoir expliquer que c'était pour pouvoir changer tout les liens facilement en cas de changement d'hebergement.

Merci pour ton aide.

par Nagol » 10 janv. 2008, 13:49

si tu changes d'hébergeur alors tous tes liens (j'ai bien dis TOUS) seront à changer :)

Et puis le principe même du config.php et qu'il ne doit pas bouger (puisqu'il défini le répertoire racine)

par agité » 10 janv. 2008, 13:46

C'est justement le lien relatif qui m'ennuie a changer pour chaque page, si un jour je change config.php de dossier il faut que je retape tout les liens a la main :?

Donc ca deviens compliqué a utiliser puisqu'au final je veux faire un script qui soit facilement changeable, des que je veux pouf je change mon lien de base et ca me fait le changement sur toute les pages des dossiers et sous dossiers.

Ta methode est, je te l'accorde, assez interessante, mais dans le cas ou je veux eviter tout liens relatif c'est autre chose. Disons que dans le cas de chemin relatif alors je n'ai plus qu'a placer le reste en absolu directement mais si je change d'hebergeur ?

par Nagol » 10 janv. 2008, 13:42

hmm tu devrais oublier ma première proposition avec le DOCUMENT_ROOT il vaut mieux dans ton cas utiliser des chemins relatifs

//si config.php se trouve dans le même dossier que ton script
include_once 'config.php';

//si config.php se trouve un niveau au dessus
include_once '../config.php';

//si config.php se trouve deux niveaux au dessus
include_once '../../config.php';

n'oublies de placer cet include tout à fait au début de chaque script

ensuite normalement tu peux inclure avec la constante

//exemple se trouve dans le même répertoire que config
include_once ROOT_DIR . 'exemple.php';

//exemple se trouve dans le sous répertoire menu
include_once ROOT_DIR . 'menu/exemple.php';

par agité » 10 janv. 2008, 13:29

dis toi que le seul lien relatif de chacun de tes scripts est le lien vers config.php justement et que c'est la qu'est l'avantage. puisqu'après tu disposes d'une constante pour exprimer un chemin absolu.

ce que tu veux c'est précisément ça, crois moi :)

Les sessions sont faites pour des données temporaires (préférences du site options comme la langue, le login si tu gères une authentification. tes données d'accès au fichier sont des données que tu doit considérer comme étant statique. Le fait d'exprimer les chemins en relatif est naturel voire même obligatoire, une fois que tu as correctement mis le système en place il est totalement indépendant du répertoire racine (celui contenant ton site web) et par extension tu pourras aisément "porter" ton application vers un nouveau serveur sans effectuer un quelconque recodage.

Dis moi si je me trompe mais il me semble qu'on est exactement dans ce que tu demandes non? :)
Oui on est bien dans ce que je demande :)

Par contre je suis obliger de faire un lien sur chaque page type
<?php include $_SERVER['DOCUMENT_ROOT'] . 'dossiercomplet/config.php'; ?>
hors si je change d'hebergeur bim c'est toute les pages vers ce lien que je dois retaper :/

et ca c'est assez genant

après quelque test firefox me retourne une erreur lorsque j'utilise :

<? echo $_ROOT_DIR; ?> il ya bien un lien mais il ne fonctionne pas

avec
<? echo ROOT_DIR; ?> il ne marche plus.


EDIT : <? $_ROOT_DIR; ?> fonctionne correctement mais lorsque je change de page les images et liens ne fonctionnent plus.

par Nagol » 10 janv. 2008, 13:26

dis toi que le seul lien relatif de chacun de tes scripts est le lien vers config.php justement et que c'est la qu'est l'avantage. puisqu'après tu disposes d'une constante pour exprimer un chemin absolu.

ce que tu veux c'est précisément ça, crois moi :)

Les sessions sont faites pour des données temporaires (préférences du site options comme la langue, le login si tu gères une authentification. tes données d'accès au fichier sont des données que tu doit considérer comme étant statique. Le fait d'exprimer les chemins en relatif est naturel voire même obligatoire, une fois que tu as correctement mis le système en place il est totalement indépendant du répertoire racine (celui contenant ton site web) et par extension tu pourras aisément "porter" ton application vers un nouveau serveur sans effectuer un quelconque recodage.

Dis moi si je me trompe mais il me semble qu'on est exactement dans ce que tu demandes non? :)

par agité » 10 janv. 2008, 13:14

Non.

avec les chemins relatifs vers config.php et ce que j'ai expliqué plus haut tu n'auras strictement aucun include à corriger après migration.
EDIT :

Après reflection je dis un peu n'importe qui puisque document root suivis du chemin ne changera pas ...

en fait ta methode est vraiment bien je viens de tester :

- les liens marchent
- les images marchent
- les variables de sessions marchent

donc c'est la fête merci bien pour votre aide je met la balise résolu.

Mais je vais me renseigner au pourquoi du comment de l'explication de Ryle quand a la perte des données lors d'un appel depuis un lien de session.

merci encore !


RE EDIT : firefox m'indique qu'il ne peux pas charger un lien depuis un local c: :roll:

par Nagol » 10 janv. 2008, 13:11

Non.

avec les chemins relatifs vers config.php et ce que j'ai expliqué plus haut tu n'auras strictement aucun include à corriger après migration.

D'autre part il faut que tu réalises que ta méthode ne fonctionne tout simplement pas, puisqu'il suffit d'avoir un sous répertoire pour que ca ne fonctionne plus (eh oui ta variable de session ne fonctionnera que pour les scripts à la racine) c'est tout simplement une erreur que de prendre ce chemin la.

Enfin, je n'ai aucun interêt à te mentir ou à t'emmener dans une mauvaise direction ce que je t'explique je le met en pratique depuis bientôt 10 ans (depuis php2/début de php3 quand même) et ca fonctionne à merveille.

par agité » 10 janv. 2008, 13:02

et bien tu peux aussi inclure config.php de façon relative
include '../config.php';
ce qui te permet d'être indépendant du répertoire dont tu parles.
justement je veux eviter a tout prix les chemis relatif, c'est ce pourquoi j'utilise les variables de session.

Je veux que depuis n'importe qui hebergement ou changement de page j'ai juste a changer ce lient $_SESSION['Base_url']

Ce qui serait le plus simple, mais apparement il me perds les variables de session entre temps.

Ta methode me permet d'utiliser le document root mais ce n'est pas ce que je cherche a faire car en appelant ce fichier de config il faut modifier le lien sur toute les pages qui ne sont pas dans le même repertoire.

par Ryle » 10 janv. 2008, 13:01

Lorsque tu inclus un fichier en spécifiant une url comme c'est le cas ici, c'est comme si quelqu'un ouvrait son navigateur, se connectait à n'importe quel site, prenait le code html généré et l'insérait à l'endroit souhaité... donc nécessairement, aucune des variables que tu pourrais avoir en session n'y est présente.

Donc quand tu fais un include() pour intégrer un fichier php que tu souhaites exécuter, il est indispensable de spécifier un chemin local (relatif par rapport au script qui l'inclut, ou global par rapport à la racine du serveur)

Code : Tout sélectionner

include("../../dossier/fichier_a_include.inc.php"); // relatif include("/www/dossier/fichier_a_include.inc.php"); // global par rapport à la racine du disque include("C:\\www\\dossier\\fichier_a_include.inc.php"); // global
Maintenant, lorsque tu veux spécifier le chemin d'une image, c'est au navigateur que tu l'indiques. La encore, c'est un chemin relatif ou global qu'il te faut utiliser, le chemin global se faisant par rapport au nom de domaine

Code : Tout sélectionner

<img src="../../dossier/image.jpg"> // relatif <img src="/dossier/image.jpg"> // global par rapport à la racine du domaine <img src="http://domaine.com/dossier/image.jpg"> // global
Maintenant il ne te reste plus qu'à t'adapter au contexte, choisir la façon dont tu souhaites procéder et suivre les conseils de Nagol sur les variables existantes qui peuvent te servir :)

par Nagol » 10 janv. 2008, 13:00

et bien tu peux aussi inclure config.php de façon relative
include '../config.php';
ce qui te permet d'être indépendant du répertoire dont tu parles.

par agité » 10 janv. 2008, 12:56

$_SERVER['DOCUMENT_ROOT'] sera la tout prêt à t'attendre je ne comprend pas bien ta volonté de vouloir gérer les choses sans utiliser les ressources universelle à ta disposition :)
En fait le $_SERVER['DOCUMENT_ROOT'] ne me retourne pas l'endroit que je souhaite.

Il est donc impossible d'avoir a definir sur chaque page $_SERVER['DOCUMENT_ROOT']/mondossier/

je voudrais une methode de lien qui soit definie de base et directement utilisable.

hors document_root ne me retourne pas le dossier que je souhaite.

par Nagol » 10 janv. 2008, 12:54

$_SERVER['DOCUMENT_ROOT'] sera la tout prêt à t'attendre je ne comprend pas bien ta volonté de vouloir gérer les choses sans utiliser les ressources universelle à ta disposition :)