IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

include dans fonction->perd ses variables


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut include dans fonction->perd ses variables
    Je veux faire une fonction tryInclude qui à présentement la syntaxe suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function tryInclude($fileName){
    	if (file_exists($_SERVER['DOCUMENT_ROOT'].'/extension/'.$fileName)){
    		include $_SERVER['DOCUMENT_ROOT'].'/extension/'.$fileName;
    	}
    ['DOCUMENT_ROOT'].'/fonction/'.$fileName))
    	else{
    		include $_SERVER['DOCUMENT_ROOT'].'/fonction/'.$fileName;
    	}
     
    }
    Ce que la fonction doit faire:
    si un fichier existe dans extension...faire l'include du fichier dans le dossier extension...sinon faire le include avec le fichier dans fonction


    Le problème que j'ai est que si j'ai une variable dans la page maitresse et que cette variable est utilisé dans le fichier que tryInclude appele...alors cette variable n'y est plus....

    Que doit-je faire pour les variables ne soient pas perdus lors de l'appele de tryInclude.

    Merci


    EX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?
    tryInclude('layout_menu-admin.php');//perd ses variables
    //include 'extension/layout_menu-admin.php'; //concerve ses variables
    ?>

  2. #2
    Membre actif Avatar de Retrokiller069
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 217
    Points : 296
    Points
    296
    Par défaut
    Bonjour,

    je ne suis pas sur de comprendre, c'est variables sont de quels types (post,get,session...)? Ou alors tu parles de la variable présente dans ton tryinclude?

    tu me fais peur avec ca, utilise plutôt <?php
    Ce n'est pas ce que nous voulons faire qui est impossible mais ce sont les moyens à sa mise en oeuvre qui peuvent le paraître

    Ps: N'oubliez pas SVP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut c'est variables sont de quels types (post,get,session...)?
    les variables sont des variables php -> $variables

    ex: dans index.php ...on a une variable $variable que je veux utiliser dans

    layout_menu-admin.php

    dans le include $variable existe
    mais avec mon tryInclude...$variable n'existe pas

    Merci


    PS: pourquoi pas <? ?

  4. #4
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Bonsoir,

    Ne rencontrerais-tu pas un problème de portée des variables ?

    Quant aux balises courtes d'ouverture (<?), tu trouveras des explications ICI.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Oui surement un probleme de porter de variable...
    C'est bien beau tout ces explications mais le mandat est de régler mon problème avec tryInclude...Comment modifier ma fonction tryInclude pour qu'elle agisse comme un include au niveau des variables...

    Merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Est-ce possible?
    Est-ce possible ou php ne permet pas ce que je veux?

  7. #7
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Non PHP ne permet pas de faire cela.
    Et d'ailleurs je ne connais pas de langage le permettant pour la même raison de portée de variable.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  8. #8
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    C'est tout à fait possible en portant la variable en global

    exemple :

    le fichier common.inc.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    global $mavar; // on passe la variable en global
    echo "<h1>test : ".$mavar."</h1>"; 
    ?>
    le fichier test.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <html>
    <head><title>test</title>
    <body>
     
    <?php
     
    $mavar = "Je suis un test";
     
    function tryInclude($fileName){
    	if (file_exists($_SERVER['DOCUMENT_ROOT'].$fileName)){
    		include $_SERVER['DOCUMENT_ROOT'].$fileName;
    	}
    }
     
    tryInclude('common.inc.php');
    ?>
     
     
    </body>
    </html>

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Oui mais c'est moche et non maintenable...
    Car il faut déclarer toutes les variables possibles et inimaginables qui pourront être contenues dans les fichiers qui pourront être inclus...
    Autant dire qu'on commence à construire une usine nucléaire.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  10. #10
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Oui mais c'est moche et non maintenable
    OK,si on oublie les constantes de PHP et les miennes (principalement des références de chemin), je n'utilise quasiment jamais les variables globales...

    Mais la question était "PHP en est-il capable ?" il me semble.


  11. #11
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Je suis d'accord avec toi, mais pour ma part un oui/non n'est pas la meilleure des réponses.
    C'est comme répondre "Oui il est possible de te baigner dans un bain d'acide".
    Cela mérite du détails. ^^

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Solution possible?
    Peut-on récupérer tout les variables non-global et les mettre dans un tableau que l'on passe à la fonction tryInclude à la fin on déctruit ces valeurs?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    perso, j'enregistrerais dans des variables de session.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $_SESSION['mavariable'] = $mavariable; ?>
    De cette façon, on la récupère où et quand on veut...

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Désolé les petits français ... j'ai trouvé tout seul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    function getDefinedVars($varList, $excludeList)
      {
          $temp1 = array_values(array_diff(array_keys($varList), $excludeList));
          $temp2 = array();
          while (list($key, $value) = each($temp1)) {
              global $$value;
              $temp2[$value] = $$value;
          }
          return $temp2;
      }
     
    function tryInclude($fileName,$allVariables=array()){
    	extract($allVariables, EXTR_PREFIX_SAME, "wddx");
     
    	if (file_exists($_SERVER['DOCUMENT_ROOT'].'/extension/'.$fileName)){
    		include $_SERVER['DOCUMENT_ROOT'].'/extension/'.$fileName;
    	}
    	//elseif (file_exists($_SERVER['DOCUMENT_ROOT'].'/fonction/'.$fileName))
    	else{
    		include $_SERVER['DOCUMENT_ROOT'].'/fonction/'.$fileName;
    	}
     
    }
     
    $excludeList = array('GLOBALS', '_FILES', '_COOKIE', '_POST', '_GET', 'excludeList', '_ENV','HTTP_ENV_VARS','HTTP_POST_VARS','HTTP_GET_VARS','HTTP_COOKIE_VARS','_SERVER','HTTP_SERVER_VARS','HTTP_POST_FILES','_REQUEST','HTTP_SESSION_VARS','_SESSION');//pour tryInclude
     
     
     
    tryInclude('layout_menu-admin.php',getDefinedVars(get_defined_vars(), $excludeList));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] Include dans fonction mail
    Par Guizmo2000 dans le forum Langage
    Réponses: 8
    Dernier message: 28/01/2013, 09h32
  2. Portée des variables: Include dans une fonction
    Par BlindeKinder dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2011, 18h45
  3. variable dans fonction
    Par pierre371 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 14h24
  4. [Mail] Mettre un include dans une variable
    Par Death83 dans le forum Langage
    Réponses: 16
    Dernier message: 04/03/2006, 20h01
  5. Réponses: 5
    Dernier message: 13/08/2004, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo