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

Bibliothèques et frameworks PHP Discussion :

[DOM] erreur avec DOM PHP5


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut [DOM] erreur avec DOM PHP5
    Bonjour,
    j'ai développé mon site sur easyphp1.8 avec PHP4 et domxml en local ca tourne sur XP. J'ai déployé chez l'hébergeur ç a ne marche plus car il est sous Linux, PHP5. PHP5 utilise le DOM.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    $monfich=$_GET['LFILE'];
     
    //--au lieu d'utiliser ceci ( de php4)
    $dom=domxml_open_mem($monfich) ;
     
    //--j'ai utilisé ceci :
    $dom=new DomDocument('1.0','iso-8859-1');
    $dom=loadXML('$monfich');
     
    ?>
    Voilà l'erreur que j'ai :

    Warning: domdocument() expects parameter 2 to be long, string given in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 87

    Fatal error: Call to undefined method: domdocument->loadxml() in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 88

    quelqu'un pourait m'aider ? c'est urgent .
    Je vous remercie d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Vous pouvez faire plus simple et plus direct :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom = DomDocument::load($monfich);

    Il y a différentes erreurs dans votre code :
    • loadXML est une méthode de DomDocument et non une fonction (à moins d'en avoir écrite une qui utilise ce nom ...)
    • la méthode loadXML crée un DomDocument à partir d'une chaîne de caractère et non d'un fichier
    • $monfich ne sera pas interpolée (remplacée par sa valeur) dans une chaîne délimitée par des single quotes


    Quelques liens utiles :


    Par contre je ne comprends pas le warning. La ligne 87 correspond à quoi très précisément ? Vous utilisez bel et bien PHP 5 ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci de votre réponse,
    en effet j'ai tout essayé même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $dom = DomDocument::load($monfich);
    En fait la variable $monfich contient un flux xml c'est pourquoi je dois l'ouvrir avec cette méthode :loadXML.
    la ligne 87 correspond à ça :
    $dom = new DomDocument('1.0', 'iso-8859-1');
    Mon herbergeur est bien sur php5 (je l'ai vu avec phpinfo)
    Je vous remercie encore.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Dans ce cas vous avez raison pour loadXML.

    Ratissons plus large :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!isset($_GET['LFILE'])) {
        die('Paramètre attendu');
    }
    if (!preg_match('/^5/', PHP_VERSION)) { // Il ne faudrait pas exclure les versions RC*
        echo "Vous n'utilisez pas PHP 5 !";
    }
    if (!extension_loaded('dom')) {
        die("L'extension DOM n'est pas disponible");
    }
    $dom = DomDocument::loadXML($_GET['LFILE']);
    header('Content-type: text/plain');
    echo $dom->saveXML();


    Les messages d'erreur restent inchangés ? Quelle est votre version précise de PHP ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci ,
    voilà ce que j'ai comme réponse :
    Vous n'utilisez pas PHP 5 !L'extension DOM n'est pas disponible

    pourtant lorsque je fais http://195.144.11.42/phpinfo.php
    j'ai bien PHP 5.2.3

    comment est-ce possible ?
    Merci de me renseigner !

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est un phpinfo public/global ? Parce qu'ils proposent le même pour PHP 4. Puisque vous semblez être en PHP 4, soit vous migrez vers PHP 5 (si vous en avez la possibilité) soit vous conservez vos fonctions domxml_*

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    bonjour,
    le problème est que j'ai aussi utilisé le domxml (php4) mais il ne marche pas aussi je trouve cela drôle.J'ai essayé le domxml(php4) c'est d'ailleurs cela qui est sur le local, puis changé en Dom pour php5. Comment je peux alors conserver le domxml ou évoluer sur du Dom ?
    Je vous remercie encore .

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Excusez moi je viens de lire le topic que vous m'avez mis en lien et je vous remerci. En effet si je vous comprends bien ce qu'il est possible de garder mon code écrit avec domxml et c'est ce que je souhaite maintenant car le passage à php5 peut s'averer délicat car je suis mutualisé il peut arrivé quelque chose on ne sais jamais. Donc à ce stade comment faire alors marcher le domxml dans ce cas ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Refaites le test pour PHP 4 (si ce n'est pas déjà fait) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!isset($_GET['LFILE'])) {
        die('Paramètre attendu');
    }
    if (!preg_match('/^4/', PHP_VERSION)) {
        echo "Vous n'utilisez pas PHP 4 !";
    }
    if (!extension_loaded('domxml')) {
        die("L'extension DOMXML n'est pas disponible");
    }
    $dom = domxml_open_mem($_GET['LFILE']);
    header('Content-type: text/plain');
    echo $dom->dump_mem();
    Ou alors écrivez vous-mêmes votre fichier phpinfo sur votre espace

    Cela m'étonne que vous n'ayez ni DOM (php5) ni DOMXML (php4, cette extension a, par ailleurs, beaucoup évoluée au fil des versions).

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci de votre réponse, j'ai essayé le test et voilà ce j'ai :
    Warning: domxml_open_mem() [function.domxml-open-mem]: AttValue: " or ' expected in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 113

    Warning: domxml_open_mem() [function.domxml-open-mem]: attributes construct error in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 113

    Warning: domxml_open_mem() [function.domxml-open-mem]: Couldn't find end of Start Tag critere line 1 in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 113

    Fatal error: Call to a member function on a non-object in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 115

    ligne 113 c'est :$dom = domxml_open_mem($_GET['LFILE']);
    ligne 115 c'est :echo $dom->dump_mem();

    PS: en mettant les simples cotes sur ('$_GET['LFILE']') j'ai cette erreur :

    Warning: domxml_open_mem() [function.domxml-open-mem]: Start tag expected, '<' not found in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 113

    Fatal error: Call to a member function on a non-object in /home/users2/a/acat31mp/www/BIB69/Membres/mesrecherches_bib.php on line 115


    S'il faut écrire ce phpinfo pour la page comme je dois m'y prendre ?
    Merci encore de votre aide.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par opeo
    PS: en mettant les simples cotes sur ('$_GET['LFILE']') j'ai cette erreur :
    N'en mettez pas ! Je vous l'ai déjà signalé plus haut et vous en ai expliqué la raison.

    Citation Envoyé par opeo
    S'il faut écrire ce phpinfo pour la page comme je dois m'y prendre ?
    Cela ne devra pas être utile puisque vous semblez utiliser une version PHP 4 et les fonctions domxml sont bien reconnues (aucune erreur de type "undefined function/method"). Par contre, ce diagnostic vient contredire vos précédents propos :
    Citation Envoyé par opeo
    le problème est que j'ai aussi utilisé le domxml (php4) mais il ne marche pas aussi je trouve cela drôle.J'ai essayé le domxml(php4) c'est d'ailleurs cela qui est sur le local


    D'après les messages d'erreur, le problème rencontré se situe au niveau du document XML passé par URL ($_GET['LFILE']). Pourrait-on en savoir plus à ce sujet (comment effectuez-vous ce passage, que lui donnez-vous, ...) ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci de votre réponse,
    pour la création du flux je passe par javascript de la façon suivante :
    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
     
    <script >
     
    var tab=new Array(3);
    	var  nbcrit = 0;
        	var xCrit = new ActiveXObject("MSXML.DomDocument");
    	xCrit.loadXML("<root />");
         	var cptCrit = 0 ;
     
     
    //--l'ajout d'un critère avec la fonction 
     
    function ajoutcrit(){
    	var letype = document.MRB.ltype[document.MRB.ltype.selectedIndex].value;
    		var titre1 = document.MRB.ltype[document.MRB.ltype.selectedIndex].text;
    		var lesigne  = document.MRB.signe.value;
    		var lavaleur = document.MRB.valeur.value;
     
     
    	var xNoeud = xCrit.createElement("critere");   // Création du nouveau noeud...
             		xNoeud.setAttribute("id", ++cptCrit);          // ... avec ses attributs
             		xNoeud.setAttribute("letype", letype);
    	 		xNoeud.setAttribute("lsign", lesigne);
    			xNoeud.setAttribute("laval", lavaleur);
             		xCrit.documentElement.appendChild(xNoeud);      // On l'ajoute dans le XML
     
    }
     
    //--validation du formulaire et transfert du flux
     
    function valid_rech(){
     
    		document.MRB.lecritere.value=xCrit.xml;
    		document.MRB.submit();
     
    	}
    </script>
    Attention de ne tenez pas compte du $_GET['LFILE'] c'était juste pour exemple. En faite je le récupère avec
    $_POST['lecritere'];
    voilà ce qu'on obtient dans le flux:
    <root><critere id="1" letype="IC" lsign="SUP" laval="40" /></root>
    une fois le flux récupéré je l'ouvre dans l'autre page et c'est à partir de là ou j'ai tous les problème.


    encore merci !

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Le code Javascript ne m'intéresse pas vraiment bien qu'il paraisse correct (d'autant plus que ce n'est pas ma spécialité). Pourrais-je plutôt avoir :
    1. un var_dump de vos données XML ($_POST['lecritere'] si j'ai bien compris)
    2. votre code PHP en faisant le parsing


    Une piste pour commencer : la fonctionnalité magic_quotes_gpc ne serait-elle pas active sur votre serveur (d'après les phpinfo publics ce serait le cas) ? Le cas échéant il faudrait commencer par appliquer stripslashes sur $_POST['lecritere'] voir automatiser cette opération :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (!isset($_POST['lecritere'])) {
        # ...
    } else {
        # On en fait le parsing
        $xml = get_magic_quotes_gpc() ? stripslashes($_POST['lecritere']) : $_POST['lecritere'];
        $dom = dom_xml_open_mem($xml);
        # ...
    }

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut
    Merci, merci, merci !!!!!!!
    ça marche , effectivement c'était cette fonctionnalité qu'il fallait voir?
    Je vous remerci pleinement !

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

Discussions similaires

  1. [DOM] CloneNode avec DOM, XHR ne suit pas
    Par sativa808 dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 12/09/2008, 15h36
  2. [DOM] Erreur avec la méthode setAttribute
    Par PierreBTSIG dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 19/05/2008, 13h45
  3. [DOM] difficulté avec DOM
    Par gentil dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/03/2007, 17h29
  4. [DOM] Php5 : créer un fichier xml avec Dom
    Par devadh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/01/2007, 14h04
  5. Erreur avec l'API dom xml
    Par bluemartini dans le forum Langage
    Réponses: 8
    Dernier message: 23/06/2006, 11h05

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