XML2Array parser dør ved for meget data
Hej Eksperter!Jeg bruger følgende XML2Array script:
----
<?
class ParseXML {
function GetChildren($vals, &$i) {
$children = array(); // Contains node data
if(isset($vals[$i]['value'])) {
$children['value'] = $vals[$i]['value'];
}
while(++$i < count($vals)) {
// LowerCase keys
$vals[$i]['tag'] = strtolower($vals[$i]['tag']);
switch ($vals[$i]['type']) {
case 'cdata':
if(isset($children['value'])) {
$children['value'] .= $vals[$i]['value'];
} else {
$children['value'] = $vals[$i]['value'];
}
break;
case 'complete':
if(isset($vals[$i]['attributes'])) {
$children[$vals[$i]['tag']][]['attributes'] = $vals[$i]['attributes'];
$index = count($children[$vals[$i]['tag']])-1;
if(isset($vals[$i]['value'])) {
$children[$vals[$i]['tag']][$index]['value'] = $vals[$i]['value'];
} else {
$children[$vals[$i]['tag']][$index]['value'] = '';
}
} else {
if(isset($vals[$i]['value'])) {
$children[$vals[$i]['tag']][]['value'] = $vals[$i]['value'];
} else {
$children[$vals[$i]['tag']][]['value'] = '';
}
}
break;
case 'open':
if(isset($vals[$i]['attributes'])) {
$children[$vals[$i]['tag']][]['attributes'] = $vals[$i]['attributes'];
$index = count($children[$vals[$i]['tag']])-1;
$children[$vals[$i]['tag']][$index] = array_merge($children[$vals[$i]['tag']][$index],$this->GetChildren($vals, $i));
} else {
$children[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
}
break;
case 'close':
return $children;
}
}
}
function GetXMLTree($xmlloc, $data = false) {
if(!$data) {
if(file_exists($xmlloc)) {
$data = implode('', file($xmlloc));
} else {
if($fp = @fopen($xmlloc,'r')) {
while(!feof($fp)) {
$data = $data . fread($fp, 1024);
}
fclose($fp);
}
}
}
$parser = xml_parser_create('ISO-8859-1');
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
$success = xml_parse_into_struct($parser, $data, $vals, $index);
if($success === 0) {
return false;
}
xml_parser_free($parser);
$tree = array();
$i = 0;
$vals[$i]['tag'] = strtolower($vals[$i]['tag']);
if(isset($vals[$i]['attributes'])) {
$tree[$vals[$i]['tag']][]['attributes'] = $vals[$i]['attributes'];
$index = count($tree[$vals[$i]['tag']])-1;
$tree[$vals[$i]['tag']][$index] = array_merge($tree[$vals[$i]['tag']][$index], $this->GetChildren($vals, $i));
} else {
$tree[$vals[$i]['tag']][] = $this->GetChildren($vals, $i);
}
return $tree;
}
}
?>
----
Men den dør ved for meget data.. ved ikke lige præcis hvor meget det drejer sig om..
Er der nogen der kan se nogen faldgruber jeg har overset? Eller har nogen idéer til hvad der kan gøre det..
Har sat set_time_limit(0); og den dør omkring 3. kald til GetChildren hvis der er for meget data, hvis ikke så fortsætter den lystigt!
Mvh. Philip Espersen
