Оптимизация парсера xml

Здравствуйте, пишу парсер xml с автоматическим созданием страниц через api
Возникла проблема при обработке файла

Если там несколько значений то все ок
Но когда пробую обработать полный файл в 36 мегабайт то вы должны акт 504 ошибку и создаёт только несколько страниц

<?php
ini_set('max_execution_time', 5000);
header('Content-Type: text/html; charset=utf-8');
$xml  = simplexml_load_file('misc/555551.xml');
$parent = '488488';
$template = '2';

 

foreach($xml->Complexes->Complex as $item) {
$Complexes_id = $item->attributes()->id;
$Complexes_title = $item->attributes()->title;
$Complexes_address = $item->attributes()->address;
$Complexes_latitude = $item->attributes()->latitude;
$Complexes_longitude = $item->attributes()->longitude;
$Complexes_regionid = $item->attributes()->regionid;
$Complexes_builderid = $item->attributes()->builderid;
if($Complexes_title == "") {
    $Complexes_title = "ЖК - ".$Complexes_id;
}
$doc = $modx->newObject('modDocument');  
$doc->set('parent',$parent);
$doc->set('template',$template); 
$doc->set('pagetitle',$Complexes_title);
$doc->set('introtext',$Complexes_address);
$doc->save();   
$id = $doc->get('id');

$resource = $modx->getObject('modResource', $id);
$resource->setTVValue('complexes_id', $Complexes_id);
$resource->setTVValue('loc_x', $Complexes_latitude);
$resource->setTVValue('loc_y', $Complexes_longitude);
echo 'Готово';

 foreach($xml->ApartmentsFirst->Apartment as $item) {
$complexid = $item->attributes()->complexid;
$ap_id = $item->attributes()->id;
$res = $modx->getObject('modResource', $id);

$tv = $res->getTVValue('complexes_id');

if($complexid == $tv) {
$parent_ = $id;
$doc = $modx->newObject('modDocument');  
$doc->set('parent',$parent_);
$doc->set('template',$template); 
$doc->set('pagetitle',$ap_id);
$doc->save();
}
}


foreach($xml->ComplexSubways->ComplexSubway as $item) {

$complexid = $item->attributes()->complexid;
$subwayid = $item->attributes()->subwayid;

$res = $modx->getObject('modResource', $id);
$tv = $res->getTVValue('complexes_id');

if($complexid == $tv) {
$parent_ = $id;
$resource->setTVValue('subway', $subwayid);
}

}


}
П.С извините если у кого пошла кровь из глаз :(
Denis Chernavin
22 февраля 2019, 12:29
modx.pro
623
0

Комментарии: 2

Наумов Алексей
22 февраля 2019, 13:49
+1
Поди память заканчивается, или время выполнения скрипта.

Ищите способ разбить файл на части, обрабатывать его чем-то быстрым и т.п.
    Павел Романов
    22 февраля 2019, 19:12
    +1
    Попробуйте использовать не Simple XML (он сразу весь файл в память считывает), а XMLReader — он построчно работает.
    А при создании можно через Ajax управлять array_slice массива с данными.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2