begin process at 2012 05 28 13:56:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Buffer et variables au sein d'une fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Buffer et variables au sein d'une fonction

lundi 2 juillet 2007 à 15:34:52 | Buffer et variables au sein d'une fonction

Ordinastie

Bonjour,

J'ai une classe permettant l'affichage d'un cadre plus ou moins grahique autour d'un contenu. Pour chaque chaque cadre j'appelle une méthode pour la définition du contenu que je passe en paramètre (simple string).
J'ai voulu amélioré ma méthode pour qu'elle détecte si la string passée en paramètre correspond à un fichier, et si c'est le cas, elle récupère le contenu du fichier.


public

function SetContent( $c )
{
      if(is_file($c
))
      {
            ob_start
();
            require($c
);
            $c = ob_get_contents
();
            ob_end_clean
();
       }
      $this->_contents = $c
;
}
Mon problème, c'est que le contexte d'exécution du fichier inclu, c'est la méthode, et donc les variable du fichier ne sont pas initialisés.
Donc existe-t-il un moyen pour que si je fais:

$cadre

= new Cadre();
$i
= 10;
$cadre->SetContent('myfile.php'
);

dans myfile.php on ait $i = 10 ?

Merci d'avance
@+ Ordinastie.


lundi 2 juillet 2007 à 18:34:53 | Re : Buffer et variables au sein d'une fonction

coucou747

Administrateur CodeS-SourceS
Salut

global $i; avant ton require


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
lundi 2 juillet 2007 à 18:49:07 | Re : Buffer et variables au sein d'une fonction

Ordinastie

Salut,

Oui, effectivement, ça, ca marche. Mais ça marche à condition de connaître toutes les variables calculées avant et nécessitées pendant. Et quand bien même, c'est pas trop le but recherché de spécifier avant chaque utilisation de variable qu'il est en global.

Mais je suis pas spécialement convaincu que ce que je veux faire, soit faisable :)

@+ Ordinastie
lundi 2 juillet 2007 à 18:53:30 | Re : Buffer et variables au sein d'une fonction

coucou747

Administrateur CodeS-SourceS
Salut

c'est faisable, t'as une truc qui permet de lister toutes les variables utilises, mais je ne m'en souviens plus


une recherche sur exalead vous aurait peut-etre evite de poser cette question
In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
lundi 2 juillet 2007 à 22:50:14 | Re : Buffer et variables au sein d'une fonction

Flachy Joe

Il existe get_defined_vars qui renvoi un tableau de toutes les variables.

Flachy Joe
Ta vie t'est prêtée, fais en un cadeau.
mardi 3 juillet 2007 à 11:51:49 | Re : Buffer et variables au sein d'une fonction

Ordinastie

Ah, j'y ai presque cru :)

Malheureusement, selon le manuel Php :

get_defined_vars() retourne un tableau multidimensionnel contenant la liste de toutes les variables définies, qu'elles soient des variables d'environnement, de serveur ou définies par l'utilisateur dans la portée d'appel de la fonction get_defined_vars().

Donc je n'ai accès qu'aux variables de la méthode. :(
Je suis de moins en moins convaincu que l'on puisse overrider le contexte d'exécution d'un fonction, alors en attendant, je fais comme ca:

Dans la classe :

public function StartContent()
{
      ob_start();
}

public function EndContent()
{
      $c = ob_get_contents();
      ob_end_clean();
      $this->_contents = $c;
}

L'appel :

$cadre = new Cadre( 'Mon cadre' );
$cadre ->StartContent();
require ( 'myfile.php' );
$cadre ->EndContent();

C'est pas vraiment ce que j'aurai voulu, mais je crois que j'ai pas trop le choix là :)
Si quelqu'un a d'autres idées, je suis preneur!

@+ Ordinastie.

mardi 3 juillet 2007 à 18:19:36 | Re : Buffer et variables au sein d'une fonction

Flachy Joe

Réponse acceptée !
Et si tu faisait

$cadre = new Cadre('Mon cadre');
$cadre->SetContent('myfile.php'  , get_defined_vars());

Et une redefinition des variables du 2d paramètre dans le corps de SetContent.


Flachy Joe
Ta vie t'est prêtée, fais en un cadeau.
mardi 3 juillet 2007 à 21:47:16 | Re : Buffer et variables au sein d'une fonction

Ordinastie

Ah ouais! Pas con, j'aurai du y penser ^^
Bon, j'essaye ça demain, je te dirai comment ça se passe :)

mercredi 4 juillet 2007 à 11:01:49 | Re : Buffer et variables au sein d'une fonction

Ordinastie

Réponse acceptée !
Bon, en regardant ce que donnait le get_defined_vars() , je me suis rendu compte d'une autre chose étonnante et j'ai l'impression que c'est pas trop normal:
la variable $GLOBALS contient déjà toutes les variables utilisées, et pas seulement celles qui doivent être en global, et c'est pas ce à quoi je m'attendais...
Donc finalement je m'en suis servi, plutot que d'avoir a passer systématiquement la fonction en get_defined_vars() paramètre.
Le code est devenu :

publicfunction SetContent($_content_)
{
      if(is_file($_content_))
      {
            /* if(!$vars || !is_array($vars))
                    trigger_error('<b>Array</b> expected as 2nd parameter but got <b>' . gettype($vars) . '</b>', E_USER_ERROR);
            */
 
            $ignore = array('GLOBALS',
                                 '_ENV',
                                 'HTTP_ENV_VARS',
                                 '_POST',
                                 'HTTP_POST_VARS',
                                 '_GET',
                                 'HTTP_GET_VARS',
                                 '_COOKIE',
                                 'HTTP_COOKIE_VARS',
                                 '_SERVER',
                                 'HTTP_SERVER_VARS',
                                 '_FILES',
                                 'HTTP_POST_FILES',
                                 '_REQUEST',
                                 'HTTP_SESSION_VARS',
                                 '_SESSION',
                                 '_content_'); // sinon le path est overridé par le global si elle existe déja

            foreach
($GLOBALS AS $k => $w)
                  if(!in_array($k, $ignore))
                        global$$k;

            ob_start
();
            require($_content_);
            $_content_ = ob_get_contents();
            ob_end_clean();
      }
      $this->_contents = $_content_;
}

Any suggestions ?

@+ Ordinastie.
mercredi 4 juillet 2007 à 18:54:13 | Re : Buffer et variables au sein d'une fonction

Flachy Joe

$GLOBAL est défini comme un tableau superglobal regroupant toutes les variables du contexte global et donc le mot clef global (qui sert à faire corespondre une variable globale avec une variable locale ayant le même nom) n'a aucune incidence sur son contenu.

$GLOBAL contient toutes les variables définies en dehors des fonctions, même celles définient dans des inclusions et tant que ces inclusions sont faites au niveau global.

Flachy Joe
Ta vie t'est prêtée, fais en un cadeau.


Cette discussion est classée dans : fichier, contenu, cadre, méthode, ob


Répondre à ce message

Sujets en rapport avec ce message

Comment afficher le contenu d'un fichier texte dans une page? [ par truckracing ] Bonjour. Je débute tout juste dans le PHP, et j'ai déjà un pb...Je suis en train de traduire mon site (www.coursesdecamions.com) en anglais, et j'ai d vider le contenu d'un fichier [ par Clonk ] Bonjour,Ne pouvant pas utiliser de BDD, je dois me contenter d'un fichier texte pour mes référencements, le problème est que, si j'arrive à écrire et affichage contenu fichier Word [ par Kensin4 ] Bonjour à tous, Je voudrais savoir comment on peut afficher le contenu d'un fichier word dans une page html.Merci de m'éclairer. Executer le contenu d'une variable [ par ilvec ] Bonjour à tous,tout d'abord, merci de lire (et peut-être de répondre) ma questionVoici mon problème : dans un fichier, j'ai tout plusieurs lignes cont fichier texte ds texte area [ par kinooo ] comment afficher le contenu d'un fichier txt ds un texte area?et récup"rer ce contenu pour ecraser et copier dans le fichier txt?merci fichier texte ds texte area [ par kinooo ] comment afficher le contenu d'un fichier txt ds un texte area?et récup"rer ce contenu pour ecraser et copier dans le fichier txt?merci recupérer contenu textearea ds fichier txt [ par kinooo ] Comment récupérer le contenu d'un textearea et le mettre ds un fichier txt. Réccupérer variables POST pour Include [ par khyor ] Bonjour,Pour l'administration de mon site, j'ai réuni dans un même fichier (admin.php), les différentes actions (ajouter, modifier, supprimer un utili Upload par méthode GET [ par Blacknight91 ] Bl@cknightBonjour,Je voudrais uploader directement des fichiers sans passer par un formulaire. Est ce possible ?En fait l'url contiendrait directement Récupération contenu d'un fichier [ par repier ] Bonjour,Je souhaiterais recuperer le contenu d'un fichier php (du type fichier.php?val=toto) dans une variable, à partir d'un script php mais en apell


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,683 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales