Comment imbriquer 2 scripts php

Petit nouveau ! | 7 Messages

20 juil. 2011, 10:07

Bonjour à tous,

Je vais mettre dans mon site un espace membres et tous les fichiers pour cela sont dans un répertoire.

J'ai vu en furetant un peu partout, qu'il y avait la fonction

Code : Tout sélectionner

<?php echo ROOTPATH; ?>
qui permet d'afficher la racine du site.

J'essaie en local et c'est assez efficace. Je suppose que ça va être pareil une fois en ligne.

Comme je fais appelle à cet accès, il est nécessaire de faire un include.

Code : Tout sélectionner

<?php include("pages/membres/acces_membre.php"); ?>
Mais, ce que je ne sais pas faire, c'est imbriquer les 2 commandes ! :?

Voulez-vous me dire comment faire ?

Merci d'avance de votre aide.

Cordialement.
Masterfree
Cordialement.
Masterfree

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2011, 10:15

Heu include(ROOTPATH.'pages/membres/acces_membres.php');
Bon faut p'tet un / entre la constante et le reste mai je sais pas cd qu'il y a dans la constante ^^

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

20 juil. 2011, 10:19

Dsl mais j'ai pas très bien compris ? #-o
Cordialement.
Masterfree

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juil. 2011, 10:33

Pour ma part, c'est ce que tu veux faire que je n'ai pas compris :)

ROOTPATH est une constante que tu as du définir pour spécifier quel était le chemin de la racine de ton site. Le fait de faire un echo de cette constant t'affiche donc le chemin que tu as renseigné.

La commande include te permet d'inclure un script php (un "sous-script") à l'emplacement indiqué pour que l'ensemble du code soit traité comme s'il ne s'agissait que d'un seul et même fichier.

Donc si la constante ROOTPATH est disponible dans ton script principal, elle sera disponible dans tous les "sous-script" qui auront été inclus après la déclaration de cette constante.
Si ce que tu souhaites est utiliser la valeur de la constante pour spécifier le chemin vers le script a inclure, dans ce cas, la solution de moogli te permet de concaténer la valeur de la constante à une autre chaine pour constituer le chemin complet du fichier à inclure (un doute restant quant à l'ajout d'un "/" entre ces deux valeurs pour obtenir un chemin de répertoire correct :))

Mais si tu pouvais donner plus de précision sur ce que tu souhaites faire, ce serait plus facile de te répondre ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

20 juil. 2011, 10:35

Heu include(ROOTPATH.'pages/membres/acces_membres.php');
Bon faut p'tet un / entre la constante et le reste mai je sais pas cd qu'il y a dans la constante ^^@+
Voilà ce qu'il est affiché après avoir fait ton code :
  • Notice: Use of undefined constant ROOTPATH - assumed 'ROOTPATH' in...
Cordialement.
Masterfree

Petit nouveau ! | 7 Messages

20 juil. 2011, 10:57

Donc si la constante ROOTPATH est disponible dans ton script principal, elle sera disponible dans tous les "sous-script" qui auront été inclus après la déclaration de cette constante.
Si ce que tu souhaites est utiliser la valeur de la constante pour spécifier le chemin vers le script a inclure, dans ce cas, la solution de moogli te permet de concaténer la valeur de la constante à une autre chaine pour constituer le chemin complet du fichier à inclure (un doute restant quant à l'ajout d'un "/" entre ces deux valeurs pour obtenir un chemin de répertoire correct.
J'ai, enfin je crois, compris tes explications.
Donc, il faudrait que je déclare le chemin dans "ROOTPATH" et mettre tout ça à la racine du site ? :?:
Le hic, c'est que je ne vois pas comment faire pour déclarer ce chemin ! :(
Là dessus, tu pourrais peut-être m'aider un peu, parce que je patauge dur là ?
Mais si tu pouvais donner plus de précision sur ce que tu souhaites faire, ce serait plus facile de te répondre ;)
Je voudrais bien parce que ça m'arrangerait beaucoup votre aide, mais, mis à part ce que j'ai mis dans mon 1er post, je ne vois pas quoi mettre de plus !
Cordialement.
Masterfree

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juil. 2011, 13:24

Ce qui est fait en général consiste à créer un fichier de configuration qui va contenir toutes les constantes et les éléments qui seront nécessaires pour chacune de tes pages. Par exemple les informations de connexion à la base de données : pour éviter de les spécifier dans chaque script (et donc les modifier à 42 endroits lorsqu'elles changent), on va les centraliser dans un fichier de configuration qui va être inclu dans toutes les pages qui en on besoin :)

Sur ce principe, tu peux également ajouter des informations liées au contexte / à l'environnement sur lequel se trouve ton site. Par exemple créer une constante WEBROOT qui lorsque tu travailles en local devra avoir la valeur "http://localhost/mon-site-en-test/" mais lorsque le site est en ligne, deviendra "http://mon-domaine.plouf/" (oui, le ".plouf" est une extension très rare et réservée à une élite ;))

Il faudra donc modifier le fichier de configuration lors de l'installation du site pour renseigner les infos qui vont bien :)

Dans ton cas, tu peux donc créer un fichier de configuration (ou le compléter si tu en as déjà un) et effectivement définir une constante nommée 'ROOTPATH' (ou autre, c'est toi qui vois quel nom qualifie le mieux l'usage qu'il faudra faire de ta constante :)) et spécifier sa valeur en fonction du chemin vers la racine de ton site... sa valeur va dépendre de deux éléments : ton arborescence et de l'usage que tu veux faire de cette valeur.

En effet, la racine du site quand tu travailles avec des url, n'est pas nécessairement la même que la racine du site quand tu travailles avec le système de fichier. Mon site peut être située physique dans le répertoire D:\www\ (système de fichier), mais peut être accessible par l'adresse http://localhost/ (url).

Donc la première question a te poser c'est : à quoi doit de servir cette constante. Tu pourras ainsi savoir ce que tu dois mettre dedans, et en fonction de ton arborescence la valeur a lui donner :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

20 juil. 2011, 14:13

Merci beaucoup Ryle, tes explications sont très claires et limpides.
Maintenant, je comprends un peu mieux la différence entre "constante" et "variable". C'est l'écriture qui pose prb !

En fait, dans mon cas, si je n'ai que l'espace membres à mettre, mise à part le moteur de recherches interne, une variable est suffisant ! Enfin, je crois ! :oops:

Je n'ai pas fait de fichier de configuration mais je crois qu'il serait bien (pour moi) de le faire.
Alors, j'ai pensé à ceci (exemple pour les essais) !

Code : Tout sélectionner

<?php echo $_SERVER['HTTP_HOST']; ?> <?php define(ROOTPATH, 'http://'.$_SERVER['HTTP_HOST'].'/Exemple_Html', true); ?> <?php echo ROOTPATH; ?>
et quand je le lance, il m'est retourné ceci :
  • 127.0.0.1
    Notice: Use of undefined constant ROOTPATH - assumed 'ROOTPATH' in F:\Exemple_Html\scritp_server_en-local.php on line 6
    http://127.0.0.1/Exemple_Html
Le "$_SERVER" s'affiche bien (local)
Pas trop compris pourquoi cet avertissement dans "Notice" puisque le chemin s'affiche bien !
Si le chemin s'affiche bien, pourquoi il est dit que la "constante" n'est pas définie (si je comprends un peu) ?
Là, j'ai du mal à coder correctement pour définir la constante "ROOTPATH".

Tu veux m'aider un peu si tu as le temps ?

Merci d'avance.
Cordialement.
Masterfree

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 juil. 2011, 17:44

Il n'y a effectivement pas une grosse différence entre variable et constante... c'est surtout une question de sémantique et de syntaxe, la constante étant destinée à ne jamais être modifiée, alors que la variable peut être altérée :)

Ca prend beaucoup plus de sens quand tu travailles en équipe (ça évite qu'un autre ne bricole une valeur qu'il ne devrait pas modifier :))

Concernant ton erreur, lorsque tu déclares ta constante, son nom doit être une chaine de caractère, donc délimitée par des apostrophes ou des guillemets. Ce n'est qu'ensuite que tu pourras l'utiliser en l'appelant juste par son nom :
define('ROOTPATH', 'http://'.$_SERVER['HTTP_HOST'].'/Exemple_Html', true);
// au lieu de 
define(ROOTPATH, 'http://'.$_SERVER['HTTP_HOST'].'/Exemple_Html', true);

echo ROOTPATH; 
En effet, dans le premier cas php créer une constante nommée ROOTPATH, dans le second cas, php va chercher la valeur de la constante ROOTPATH pour l'utiliser (et comme celle-ci n'a pas été définie, il t'affiche un message d'avertissement :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

20 juil. 2011, 18:26

Ca prend beaucoup plus de sens quand tu travailles en équipe (ça évite qu'un autre ne bricole une valeur qu'il ne devrait pas modifier :))
Là-dessus, pas de risque, mais c'est très bien d'avoir souligné ce point !
Concernant ton erreur, lorsque tu déclares ta constante, son nom doit être une chaine de caractère, donc délimitée par des apostrophes ou des guillemets. Ce n'est qu'ensuite que tu pourras l'utiliser en l'appelant juste par son nom :
Je ne pensais pas que cela avait de l'importance.
C'est super de m'avoir précisé ça parce que j'ai plus de message.
En effet, dans le premier cas php créer une constante nommée ROOTPATH, dans le second cas, php va chercher la valeur de la constante ROOTPATH pour l'utiliser (et comme celle-ci n'a pas été définie, il t'affiche un message d'avertissement :))
Je savais pas trop comment Php pouvait définir ROOTPATH, je pensais que c'était déclaré comme chaine de caractères.

Mais, c'est vrai que les guillemets ou apostrophes, ça joue beaucoup, la preuve, c'est que ça marche bien. :wink:

Ton aide m'a été très précieuse et je t'en remercie vivement.
Grâce à tes lumières, l'épine de mon pied est partie ! :D

Bonne soirée Ryle et merci encore.
Cordialement.
Masterfree