Есть парсер - вот кусочек чтоб было понятно что нужно выгрузить
$strnSQL = "SELECT * FROM _posts";
$rn = mysql_query($strnSQL);
while($rown = mysql_fetch_array($rn)){
$nxml = new XMLReader();
$nxml->open('../xml/import.xml'); // начинает нехватать памяти
while($nxml->read() && $nxml->name !== 'offer');
while($nxml->name === 'offer'){
$n_node = new SimpleXMLElement($nxml->readOuterXML());
$n_id = "" . $nxml->getAttribute("id");
$nxml->next('offer');
}
$nxml->close();
unset($nxml);
}
всё это дело естественно имеет много интераций и через некоторое время заканчивается память.
Я пока не умею нормально работать с памятью и понимать что там за процессы происходят но чувствую что $nxml хоть и перезаписывает сам себя и стоит unset($nxml); но память не освобождается.
Как сделать чтоб на каждом круге полностью сбрасывалась оперативная память которая была занята открытым файлом?
Выход примерно такой но как перемещаться в начало?
$rn = mysql_query($strnSQL);
$nxml = new XMLReader();
$nxml->open('../xml/import.xml');
while($rown = mysql_fetch_array($rn)){
#$nxml->moveToFirstAttribute(); как заставить эту штуку работать чтоб чтение начиналось сначала
while($nxml->read() && $nxml->name !== 'offer');
while($nxml->name === 'offer'){
$n_node = new SimpleXMLElement($nxml->readOuterXML());
$n_id = "" . $nxml->getAttribute("id");
$nxml->next('offer');
}
}