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 :

Passage d'un 'stream' comme paramètre lors de la création d'un 'stream'.


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Avatar de epeios
    Homme Profil pro
    Ingénieur logiciel
    Inscrit en
    Août 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur logiciel

    Informations forums :
    Inscription : Août 2003
    Messages : 38
    Points : 82
    Points
    82
    Billets dans le blog
    2
    Par défaut Passage d'un 'stream' comme paramètre lors de la création d'un 'stream'.
    Je travaille actuellement sur un préprocesseur XML, qui prend en entrée des données au format XML, et fournit en sortie des données au format XML. De ce fait, il me semble que le mieux, pour faciliter sont utilisation, est de l'implémenter sous une forme lui permettant de s'intercaler facilement entre un stream contenant des données XML, et toute fonction qui prend en entrée un tel stream.

    Vu que ce préprocesseur doit se substituer à un stream, il doit lui-même être un stream. J'ai donc crée une classe que j'ai enregistré comme gestionnaire d'un protocole que j'ai nommé xpp, ce qui fût relativement facile.

    Le problème, c'est que, de ce que j'ai compris, un stream se crée grâce à la fonction fopen(). Or, on ne peut passer directement à cette fonction un stream en tant que tel comme paramètre. Donc, pour parvenir à passer un stream à mon préprocesseur, je procède de la manière suivante (je rappelle que xpp est le nom du protocole affecté à mon préprocesseur) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function getProcessedStream($stream) {
        $GLOBALS["XMLStream"] = $stream;
        return fopen("xpp://XMLStream", 'r');
    }

    le fopen() étant implémenté de la manière suivante (la ligne $this->processor... ne concerne pas directement le sujet de cette discussion) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function stream_open($path, $mode, $options, &$opened_path) {
        $url = parse_url($path);
        $this->stream = $GLOBALS[$url["host"]];
        $this->processor = XPPq::processorNew($this->stream);     
        return true;
    }

    Ce que j'aimerais, c'est pouvoir passer le stream directement à mon préprocesseur, ce qui, je pense, serait plus propre que de passer par une variable globale, mais je n'ai pas trouvé comment faire...

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    Une ressource serait plutôt une données extérieure au serveur.
    Et là le préprocesseur est plutôt la transformation d'une chaine en une autre, non ? Donc la forme la plus pratique serait plutôt une fonction (ou une méthode statique puisque vous utilisez des classes)

    Sinon, j'ai vu que le 4e argument de "fopen" peut être une ressource, je ne sais pas si vous pouvez l'utiliser :
    http://php.net/fopen

Discussions similaires

  1. [AC-2007] Utiliser une variable comme alias lors de la création de table via Vba
    Par Tipstitou dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/09/2010, 10h29
  2. Passage d'une variable comme paramètre d'une fonction
    Par lowman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2007, 15h12
  3. Passage de stream en paramètres?
    Par chrono23 dans le forum C++
    Réponses: 2
    Dernier message: 08/09/2006, 09h14
  4. Réponses: 12
    Dernier message: 06/06/2006, 12h13
  5. Réponses: 2
    Dernier message: 09/01/2006, 09h38

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