Разделить большой файл xml

183
15 декабря 2019, 08:50

Задача заключается в выборе файла на компьютере, его развибке и сохранении. Проект работает на фреймворке Laravel 5.8. Написал такой код

        $data = new \SimpleXMLElement($request->file('feed'), null, true);
    $json = json_encode($data);
    $data = json_decode($json);
    $strings = count($data->offer); //Общее количество строк
    $countString = 20000; // Количество записываемых в файл строк (для примера, их будет 20 000)
    $countFiles = intval($strings / $countString); // Целочисленное значение количества получаемых файлов
    $ostatok = $strings % $countString; // дробное число строк, оставшееся от деления
    $xml = new \SimpleXMLElement("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Ads/>");
    //Создаем файл
    for($key = 0; $key < $countFiles; $key++) {
        // Записываем в него данные
        for ($i = 0; $i < $countString; $i++) {
            $item = $data->offer[$i];
            $offer = $xml->addChild('offer');
            $offer->addChild('type', $item->type);
        }
        //Сохраняем на диск
        $dom = new \DOMDocument('1.0');
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        $dom->loadXML($xml->asXML());
        $dom->save('files/feed'.$key.'.xml');
    }

Результатом исполнения сего шедевра стало получение двух файлов. В первом было записано 20.000 строк, во втором было записано два раза по 20.000 строк.

Вопрос такой - после записи 20.000 строк в первый файл нужно из массива $data их удалить, а оставшиеся записать во второй файл и сохранить. Как это сделать?

Спасибо.

READ ALSO
Некорректно отрабатывает код

Некорректно отрабатывает код

Пытаюсь создать PHP корзину, но он ведет себя некорректноНа этапе добавления присутствует проверка, если товар существует в $_SESSION, то просто...

180
PHP Slim Rest Api

PHP Slim Rest Api

Решил написать rest api для своего приложенияВыкидывает ошибку:

160
503 Service Unavailable при большем массиве PHP

503 Service Unavailable при большем массиве PHP

проблема в следующемПри генерации массива в цикле while получаю ошибку 503, в массив записывается около 100 000 строк

157