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 :

Stocker XML dans une variable PHP


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Stocker XML dans une variable PHP
    Salut à tous,

    J'ai un léger souci : Je voudrais stocker un contenu XML assez imposant dans une variable PHP pour pouvoir y accéder plus tard dans mon code.
    Voilà plus exactement le décor :
    Je dois accéder à un flux XML du type : Par ici
    Sachant que ce flux change toutes les minutes et varie en fonction du k en paramètre.
    Donc j'ai déjà fait un truc comme ça (J'aurai toujours le code à disposition en paramètre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $FirstCode = $_GET['code'];
    $HXml = "http://www.hordes.fr/xml?k=" . $FirstCode;
    ?>
    Mon souci est d'arriver à stocker le flux.
    J'ai bien essayé des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
      $dom->load($HXml);
    ?>
    Mais il ne me rend rien ...

    Vous allez me dire de stocker le flux dans un fichier XML et de le loader par la suite.
    Mais je ne peux pas me le permettre, c'est une appli qui va potentiellement être utilisée par plusieurs centaines (voire milliers) d'utilisateurs en même temps, donc créer un fichier pour chaque surchargerait complètement mon système.
    Du coup, je ne sais pas trop quoi faire ..

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    A part l'url de ton flux tu ne stock rien du tout dans ta variable.
    Il faut lui dire d'aller lire le flux. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $HXml = file_get_contents("http://www.hordes.fr/xml?k=" . $FirstCode);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'avais déjà essayé le .
    Il ne rend rien.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump(file_get_contents("http://www.hordes.fr/xml?k=" . $FirstCode));
    Est ce que la directive allow_url_fopen est à true dans ton php.ini ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai bien allow_url_fopen = On dans mon php.ini.

    Et avec ce que tu me donnes, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $FirstCode = $_GET['code'];
    $HXml = var_dump(file_get_contents("http://www.hordes.fr/xml?k=" . $FirstCode));
     
    $dom = new DomDocument();
    $dom->load($HXml);
    $racine = $dom->documentElement;
    echo $racine->nodeName;
    me rend string(451) ""

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Garde uniquement ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $FirstCode = $_GET['code'];
    var_dump(file_get_contents("http://www.hordes.fr/xml?k=" . $FirstCode));
    qu'est ce qui s'affiche ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Invité
    Invité(e)
    Par défaut
    Toujours pareil :

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    string(451)
    Ca veux bien dire que tu récupères quelque chose (451 caractères pour être précis). Rien ne s'affiche très probablement car le xml est intérprété par ton navigateur , si tu regarde la source de la page tu devrais voir le xml.

    Donc à priori :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $FirstCode = $_GET['code'];
    $HXml = file_get_contents("http://www.hordes.fr/xml?k=" . $FirstCode);
     
    $dom = new DomDocument();
    $dom->loadXML($HXml);
    Doit fonctionner.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ben non pour moi (et pour la doc), on peut tout à fait passer une url à la fonction load du moment justement que allow_url_fopen est activé. Là quand je test sur mon PC ça plante mais uniquement parce que je suis derrière un proxy, je vois bien qu'il tente d'accéder à la source, et quand il plante, il me le dit et me l'affiche.

    A mon avis ça marche (si tu n'as aucun warning ni quoi que ce soit), c'est juste ton affichage qui doit être incorrect.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Alors avec le LoadXML, ça marche en partie.
    C'est à dire que j'ai l'impression que ça charge le premier nœud, mais pas le reste.
    Je vous explique :
    je travaille en parallèle avec une version qui utilise un fichier .xml déjà présent (pour tester), mais la version finale devra se passer de ce fichier pour ne plus considérer qu'une variable qui contiendrait tout.

    Sur la version qui utilise le fichier .xml, j'ai une suite d'instructions :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    $FirstCode = $_GET['code'];
    $HXml = "http://www.hordes.fr/xml?k=" . $FirstCode;
     
    $dom = new DomDocument();
    $dom->load('test2.xml');
    $racine = $dom->documentElement;
    echo "<h1><b>" . $racine->nodeName . "</b></h1>";
     
    $city = $dom->getElementsByTagName('city')->item(0);
    echo "<h2>" . $city->getAttribute("city") . "</h2>";
     
    $jobList = array("basic", "hunter", "tech", "tamer", "guardian", "eclair", "");
     
    $listeCitoyens = $dom->getElementsByTagName("citizen");
    foreach($listeCitoyens as $citizen)
    {
    	foreach ($jobList as $value){
    		if ($citizen->getAttribute("job") === $value) {
    			echo '<img src="resources/icons/job_' . $value . '.gif"> ';
    		}
    	}
     
    	if ($citizen->hasAttribute("name")) {
    		echo  '<a href="http://www.hordes.fr/#ghost/city?go=ghost/user?uid=' . $citizen->getAttribute("id") . '">' . $citizen->getAttribute("name") . '</a>';
        }
    	echo " - <i>" . $citizen->nodeValue . "</i><br />";
    }
     
    $listDeads = $dom->getElementsByTagName("cadaver");
    foreach($listDeads as $cadaver)
    {
    	echo "<b>X</b> <i>J";
    	if ($cadaver->hasAttribute("name")) {
    		echo  $cadaver->getAttribute("day") . "</i> - " . '<a href="http://www.hordes.fr/#ghost/city?go=ghost/user?uid=' . $cadaver->getAttribute("id") . '">' . $cadaver->getAttribute("name") . '</a>';
        }
    	echo " - <i>" . $cadaver->firstChild->nodeValue . "</i><br />";
    }
     
     
    ?>
    Tout fonctionne parfaitement et s'affiche : http://wh.zenoo0.fr

    Quand j'utilise le loadXML sans passer par le fichier .xml, j'obtiens ça : http://wh.zenoo0.fr/index2.php
    On voit que ça affiche bien "hordes", qui est le nom du premier noeud, mais n'affiche pas le reste, pourtant les instructions sont strictement les mêmes que sur le 1er lien.

    PS : Je rappelle que je bosse sur ce flux : http://www.hordes.fr/xml/?k=0e8933cb...aa25375a851434

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Je comprends pas si ça marche avec load, pourquoi vouloir absolument utiliser loadXML (et c'est normal que ça marche avec "load", et pas avec "loadXML" qui attend une chaîne XML en entrée pas un nom de fichier) ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Tu ne comprends pas ..

    Le load fonctionne, mais seulement quand je lui donne un fichier .xml en entrée.
    Or moi je ne veux pas passer par un fichier .xml mais directement récupérer le flux XML depuis http://www.hordes.fr/xml/?k=0e8933cb...aa25375a851434.

  13. #13
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Spartacusply à raison sur l'utilisation de load qui peut marcher avec des url.

    Chez moi ce code fonctionne (j'ai une liste d'utilisateur ou je ne sais quoi) :

    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
    32
    33
    34
    $dom = new DomDocument();
    $dom->load('http://www.hordes.fr/xml/?k=0e8933cb8d611c778eaa25375a851434');
    $racine = $dom->documentElement;
    echo "<h1><b>" . $racine->nodeName . "</b></h1>";
     
    $city = $dom->getElementsByTagName('city')->item(0);
    echo "<h2>" . $city->getAttribute("city") . "</h2>";
     
    $jobList = array("basic", "hunter", "tech", "tamer", "guardian", "eclair", "");
     
    $listeCitoyens = $dom->getElementsByTagName("citizen");
    foreach($listeCitoyens as $citizen)
    {
    	foreach ($jobList as $value){
    		if ($citizen->getAttribute("job") === $value) {
    			echo '<img src="resources/icons/job_' . $value . '.gif"> ';
    		}
    	}
     
    	if ($citizen->hasAttribute("name")) {
    		echo  '<a href="http://www.hordes.fr/#ghost/city?go=ghost/user?uid=' . $citizen->getAttribute("id") . '">' . $citizen->getAttribute("name") . '</a>';
        }
    	echo " - <i>" . $citizen->nodeValue . "</i><br />";
    }
     
    $listDeads = $dom->getElementsByTagName("cadaver");
    foreach($listDeads as $cadaver)
    {
    	echo "<b>X</b> <i>J";
    	if ($cadaver->hasAttribute("name")) {
    		echo  $cadaver->getAttribute("day") . "</i> - " . '<a href="http://www.hordes.fr/#ghost/city?go=ghost/user?uid=' . $cadaver->getAttribute("id") . '">' . $cadaver->getAttribute("name") . '</a>';
        }
    	echo " - <i>" . $cadaver->firstChild->nodeValue . "</i><br />";
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Invité
    Invité(e)
    Par défaut
    Oh merci !

    J'étais persuadé d'avoir déjà testé le load avec l'url directement.

    Effectivement ça marche, merci beaucoup

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

Discussions similaires

  1. Récupérer une value et la stocker dans une variable php
    Par Arkoze dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/08/2011, 16h55
  2. Stocker le contenu d'un fichier.php dans une variable php?
    Par PouetteMan dans le forum Langage
    Réponses: 15
    Dernier message: 11/05/2011, 09h35
  3. [XML] Valeur XML dans une variable PHP
    Par Jerem38 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/06/2009, 20h38
  4. Réponses: 12
    Dernier message: 26/01/2006, 09h30
  5. Utiliser la valeur d'un input dans une variable php
    Par megane dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/08/2005, 16h02

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