Probleme avec script : XML to PHP

Probleme avec script : XML to PHP - PHP - Programmation

Marsh Posté le 15-08-2005 à 19:51:59    

Salut
j'utilise ce script pour afficher un flux XML en php :
 

Code :
  1. function GetXMLTree ($xmldata)
  2. {
  3. ini_set ('track_errors', '0');
  4. $xmlreaderror = false;
  5. $parser = xml_parser_create ('ISO-8859-1');
  6. xml_parser_set_option ($parser, XML_OPTION_SKIP_WHITE, 1);
  7. xml_parser_set_option ($parser, XML_OPTION_CASE_FOLDING, 0);
  8. if (!xml_parse_into_struct ($parser, $xmldata, $vals, $index)) {
  9.  $xmlreaderror = true;
  10.  echo "error";
  11. }
  12. xml_parser_free ($parser);
  13. if (!$xmlreaderror) {
  14.  $result = array ();
  15.  $i = 0;
  16.  if (isset ($vals [$i]['attributes']))
  17.   foreach (array_keys ($vals [$i]['attributes']) as $attkey)
  18.   $attributes [$attkey] = $vals [$i]['attributes'][$attkey];
  19.  $result [$vals [$i]['tag']] = array_merge ($attributes, GetChildren ($vals, $i, 'open'));
  20. }
  21. ini_set ('track_errors', '0');
  22. return $result;
  23. }
  24. function GetChildren ($vals, &$i, $type)
  25. {
  26. if ($type == 'complete') {
  27.  if (isset ($vals [$i]['value']))
  28.   return ($vals [$i]['value']);
  29.  else
  30.   return '';
  31. }
  32. $children = array ();
  33. while ($vals [++$i]['type'] != 'close') {
  34.  $type = $vals [$i]['type'];
  35.  if (isset ($children [$vals [$i]['tag']])) {
  36.   if (is_array ($children [$vals [$i]['tag']])) {
  37.    $temp = array_keys ($children [$vals [$i]['tag']]);
  38.    if (is_string ($temp [0])) {
  39.     $a = $children [$vals [$i]['tag']];
  40.     unset ($children [$vals [$i]['tag']]);
  41.     $children [$vals [$i]['tag']][0] = $a;
  42.    }
  43.   } else {
  44.    $a = $children [$vals [$i]['tag']];
  45.    unset ($children [$vals [$i]['tag']]);
  46.    $children [$vals [$i]['tag']][0] = $a;
  47.   }
  48.   $children [$vals [$i]['tag']][] = GetChildren ($vals, $i, $type);
  49.  } else
  50.   $children [$vals [$i]['tag']] = GetChildren ($vals, $i, $type);
  51.  if (isset ($vals [$i]['attributes'])) {
  52.   $attributes = array ();
  53.   foreach (array_keys ($vals [$i]['attributes']) as $attkey)
  54.   $attributes [$attkey] = $vals [$i]['attributes'][$attkey];
  55.   if (isset ($children [$vals [$i]['tag']])) {
  56.    if ($children [$vals [$i]['tag']] == '') {
  57.     unset ($children [$vals [$i]['tag']]);
  58.     $children [$vals [$i]['tag']] = $attributes;
  59.    }
  60.    elseif (is_array ($children [$vals [$i]['tag']])) {
  61.     $index = count ($children [$vals [$i]['tag']]) - 1;
  62.     if ($children [$vals [$i]['tag']][$index] == '') {
  63.      unset ($children [$vals [$i]['tag']][$index]);
  64.      $children [$vals [$i]['tag']][$index] = $attributes;
  65.     }
  66.     $children [$vals [$i]['tag']][$index] = array_merge ($children [$vals [$i]['tag']][$index], $attributes);
  67.    } else {
  68.     $value = $children [$vals [$i]['tag']];
  69.     unset ($children [$vals [$i]['tag']]);
  70.     $children [$vals [$i]['tag']]['value'] = $value;
  71.     $children [$vals [$i]['tag']] = array_merge ($children [$vals [$i]['tag']], $attributes);
  72.    }
  73.   } else
  74.    $children [$vals [$i]['tag']] = $attributes;
  75.  }
  76. }
  77. return $children;
  78. }
  79. // URL du flux xml
  80. $url = "info.xml";
  81. $contents = file_get_contents($url);
  82. $data = GetXMLTree ($contents);
  83. print_r($data);


 
Celui ci marche sans probleme quand le fichier est pas trop gros
seulement si mon fichier XML fait 40mo ca ne marche pas
je lance le script mais rien; page blanche
 
si qqun peut m'aider

Reply

Marsh Posté le 15-08-2005 à 19:51:59   

Reply

Marsh Posté le 15-08-2005 à 20:16:33    

dans ton php.ini ya une limite memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)
 
peut-être que c'est ça ?

Reply

Marsh Posté le 15-08-2005 à 20:22:37    

ca ne change rien
j'ai mis a 64

Reply

Marsh Posté le 15-08-2005 à 20:29:53    

ça valait le coup d'essayer [:petrus75]
 
(t'as relançé apache je suppose ?)


Message édité par push le 15-08-2005 à 20:30:29
Reply

Marsh Posté le 15-08-2005 à 20:33:12    

oui je lai relancer mais pareil

Reply

Marsh Posté le 15-08-2005 à 20:35:32    

T'a essayé avec un debuggeur?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 15-08-2005 à 20:37:00    

cest a dire ?

Reply

Marsh Posté le 15-08-2005 à 20:48:19    

Prend un debuggeur PHP et regarde a quel moment ça plante ... ça revient un peu au meme que faire un echo de toutes les variables a chaque ligne ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 15-08-2005 à 20:51:16    

Je vois pas trop comment on fait
desolé mais jsuis pas un expert :=

Reply

Marsh Posté le 15-08-2005 à 20:53:25    

c'est tres bisard
cest le meme fichier, si je met 10 items dans le XML ca marche
si jamais je le met complet (40mo) ca plante

Reply

Marsh Posté le 15-08-2005 à 20:53:25   

Reply

Marsh Posté le 15-08-2005 à 23:14:03    

Tu tapes "debugger php" sur google et tu lis, je crois que c'est a ta portée meme si t'es pas un expert


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 16-08-2005 à 10:15:30    

En fait ca viendrait de la limite dexecution de PHP
celle ci est a 32M
j'ai essayé de la monter a 256M mais tj pareil
 
Ma seule solution est de découper le fichier XML en tout petit mais ca n'est pas pratique car j'aimerai recuperer ce flux pour le mettre a jour toutes les nuits
 
Si qqun a deja vu ce soucis

Reply

Marsh Posté le 16-08-2005 à 10:21:40    

Et le debugger te dis quoi?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 16-08-2005 à 10:26:48    

il me dis Fatal error ; memory etc...
 
ca vient de ce probleme

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed