Problème de script avec DOMXML

Eléphanteau du PHP | 14 Messages

30 août 2006, 08:36

Bonjour à toutes et tous!

je suis perdu aider moi :cry: !

Je suis actuellement sur le développement d'un site possèdant des news et comme le mandateurs adore le XML, je lui ai fait un site en XML. Différents fichiers font office de base de données et contiennent les infos, dont les news.

Mon problème est le suivant : lorsque j'exécute le code suivant :

Code : Tout sélectionner

$lastID = getLastNewsId(); if ($lastID<0){ echo "<div class='newsDiv'>no news actually</div>"; } else{ echo getNews($lastID,$crtLang); }
il met énormément de temps à afficher la page. Alors que si je lui donne

Code : Tout sélectionner

$lastID=4
par exemple, il va très vite. Je me suis dit que le problème était la fonction:

Code : Tout sélectionner

function getLastNewsId(){ global $xpath_news; $nb = getNbOfElement("/NewsRoot/news",$xpath_news); return ($nb-1); } function getNbOfElement($xpathString, $xpath){ $nodeList = $xpath->query($xpathString); return $nodeList->length; }
mais en mettant des echo date("m:s") dans les fonctions, tout les temps sont à la secondes prêt identiques...

Est-ce que quelquûn aurait une idée??

Petit nouveau ! | 2 Messages

02 sept. 2006, 19:55

tu as essayé de mettre un echo time(); avant et après ta premiere ligne tu obtiens quoi ?
si c'est pas ça, ça veut dire que la comparaison est longue, ça peut peut être un problème de type, essaie de coller un gettype à ton $lastId

Eléphanteau du PHP | 14 Messages

04 sept. 2006, 08:41

J'ai bien essayé de mettre un date("m:s") et j'obtient la même minute et la même seconde!!

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

04 sept. 2006, 10:00

echo time()."<hr />";
$lastID = getLastNewsId();
echo time()."<hr />";
if ($lastID<0){
echo "<div class='newsDiv'>no news actually</div>";
}
else{
echo getNews($lastID,$crtLang);
}
echo time()."<hr />";
Dis-nous quelles sont les valeurs de time() qui ressortent :)

Invité
Invité n'ayant pas de compte PHPfrance

04 sept. 2006, 12:34

J'ai essayé et j'ai toujours le même temps au chiffre près!

Je doit dire que là je necomprend plus du tout se qui se passe, surtout qu'en local je n'ai aucun problème...

Petit nouveau ! | 2 Messages

04 sept. 2006, 20:57

donc c'est l'affichage qui prend du temps l'execution n'a aucun bleme ?

Eléphanteau du PHP | 14 Messages

05 sept. 2006, 10:45

A première vue oui, mais si je fixe le $lastID à 4 par exemple, l'affichage est instantanné! Donc je ne sais pas trop où est le problème...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 sept. 2006, 10:48

Est-ce que tu peux nous donner le résultats de l'exécution du code donné par Naholyr ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 14 Messages

07 sept. 2006, 13:45

Bein voilà...


1157629407<hr />1157629407<hr />
--------------------------
Text de ma news
--------------------------
1157629407<hr />


...

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

07 sept. 2006, 14:01

ça c'est quand tu le fixes à 4 ou dans l'autre cas ?

Eléphanteau du PHP | 14 Messages

13 sept. 2006, 08:23

A la place de

Code : Tout sélectionner

$lastID = getLastNewsId() ;
je fixe

Code : Tout sélectionner

$lastID = 4;

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 sept. 2006, 08:29

echo time()."<hr />";
$lastID = getLastNewsId();
echo time()."<hr />";
if ($lastID<0){
echo "<div class='newsDiv'>no news actually</div>";
}
else{
echo getNews($lastID,$crtLang);
}
echo time()."<hr />";
Dis-nous quelles sont les valeurs de time() qui ressortent :)
C'est ce code là qu'il faut exécuter pour nous donner les valeurs du time(), c'est ce code qui est lent, l'autre avec $lastID=4 ne nous intéresse pas ;)

Eléphanteau du PHP | 14 Messages

15 sept. 2006, 11:30

:shock: J'ai vraiment l'air d'être aussi bête que ça? :shock:

C'est bien ce code là que j'ai exécuté en donnant les temps. C'est pour ça que je ne comprend plus rien. Je sais bien que ce n'est pas en fixant la valeur que les temps seront intéressant. Ingénieur en informatique pas pour rien quand même... :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 sept. 2006, 11:54

Quel est le code de getNews() ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

15 sept. 2006, 12:04

Bon, tout d'abord et avant d'aller plus loin, il faut débuguer le code en affichant des éspions de variables.

tu dois afficher les variables suivantes :
$lastID = getLastNewsId();
echo "<p>last id: $lastID<p>"; 

if ($lastID<0){ 
  echo "<div class='newsDiv'>no news actually</div>"; 
} 
else{ 
echo "<p>Crt Lang: $crtLang<p>";   
echo  getNews($lastID,$crtLang); 
}
et dans tes fonctions :
function getLastNewsId(){ 
  global $xpath_news; 
  echo "<p>Path_news: <br>"; print_r($xpath_news); echo "<p>";

  $nb = getNbOfElement("/NewsRoot/news",$xpath_news);
  
  return ($nb-1); 
} 

function getNbOfElement($xpathString, $xpath){ 
  $nodeList = $xpath->query($xpathString); 
  return $nodeList->length; 
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène