Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 15h10   #1
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
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 :
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
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 15h19   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous pouvez faire plus simple et plus direct :
Code PHP :
$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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 16h09   #3
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
Merci de votre réponse,
en effet j'ai tout essayé même avec
Code :
 $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.
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 16h47   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Dans ce cas vous avez raison pour loadXML.

Ratissons plus large :
Code PHP :
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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 17h09   #5
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
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 !
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 17h41   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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_*
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 09h49   #7
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
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 .
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 09h59   #8
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
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 ?
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 12h25   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Refaites le test pour PHP 4 (si ce n'est pas déjà fait) :
Code PHP :
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 13h19   #10
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
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.
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 14h47   #11
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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, ...) ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 15h13   #12
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
Merci de votre réponse,
pour la création du flux je passe par javascript de la façon suivante :
Code :
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 !
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h20   #13
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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);
    # ...
}
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h59   #14
Membre à l'essai
 
Inscription : novembre 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 127
Points : 21
Points : 21
Merci, merci, merci !!!!!!!
ça marche , effectivement c'était cette fonctionnalité qu'il fallait voir?
Je vous remerci pleinement !
opeo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h54.


 
 
 
 
Partenaires

Hébergement Web