php XMLReader readOuterXML не работает с большими данными - PullRequest
0 голосов
/ 28 мая 2019

У меня .xml 300 МБ +, 11kk строк. Мне нужно проанализировать каждый из разделов, таких как <Views>, <Filters> и т. Д. Во многих из этих разделов есть аналогичные столбцы, такие как <Name>, для синтаксического анализа я проверяю текущий раздел и получаю внешний XML для анализа всех данных в текущем разделе. это единственный случай, который я нашел для анализа одинаковых столбцов в разных разделах напр.

 if ($this->reader->nodeType === XMLReader::ELEMENT && $this->reader->localName === 'Views') {
                $file = $this->reader->readOuterXML();
                $columns = [
                    "setUid" => "UID",
                    "setGuid" => "GUID",
                    "setUuid" => "ID",
                    "setName" => "Name",
                ];/                
                $this->parseBlocks($import, 'BoardColumn', $columns, $file);
            }

Проблемы начинаются в секции <Assignments>, потому что в этой секции 9kk строк и сервер не может выполнить $this->reader->readOuterXML() Настройки php

memory_limit = 4096M
max_execution_time = 7200
max_input_time = 7200
post_max_size = 4096M

Настройки nginx

        fastcgi_read_timeout 3600;
        proxy_connect_timeout       3600;
        proxy_send_timeout          3600;
        proxy_read_timeout          3600;
        send_timeout                3600;

структура xml

<Project xmlns="http://schemas.microsoft.com/project">
    <Views>
        <View>
            <Name>Gantt &amp;with Timeline</Name>
            <IsCustomized>true</IsCustomized>
        </View>
        <View>
            <Name>&amp;Gantt Chart</Name>
            <IsCustomized>true</IsCustomized>
        </View>
    </Views>
    <Filters>
        <Filter>
            <Name>&amp;All Tasks</Name>
        </Filter>
        <Filter>
            <Name>&amp;All Resources</Name>
        </Filter>
    </Filters>
    <Groups>
        <Group>
            <Name>&amp;No Group</Name>
        </Group>
        <Group>
            <Name>&amp;No Group</Name>
        </Group>
    </Groups>
    <Tables>
        <Table>
            <Name>&amp;Entry</Name>
            <IsCustomized>true</IsCustomized>
        </Table>
    </Tables>
    <ExtendedAttributes>
        <ExtendedAttribute>
            <FieldID>188743731</FieldID>
            <FieldName>Tekst1</FieldName>
            <Guid>000039B7-8BBE-4CEB-82C4-FA8C0B400033</Guid>
            <SecondaryPID>255869028</SecondaryPID>
            <SecondaryGuid>000039B7-8BBE-4CEB-82C4-FA8C0F404064</SecondaryGuid>
        </ExtendedAttribute>
    </ExtendedAttributes>
    <Tasks>
        <Task>
            <UID>0</UID>
            <GUID>9AB1E99A-12FA-E811-9DD3-2016B93223A9</GUID>
            <ID>0</ID>
        </Task>
    </Tasks>
    <Resources>
        <Resource>
            <UID>0</UID>
            <GUID>A0CB8B7E-2A8C-436D-0000-0000000000FF</GUID>
            <ID>0</ID>
            <Type>1</Type>
            <IsNull>0</IsNull>
        </Resource>
    </Resources>


    <Assignments>   
        <Assignment>
            <UID>13394</UID>
            <GUID>B6C918FA-17FA-E811-9DD4-2016B93223A9</GUID>
            <TaskUID>22636</TaskUID>
            <TimephasedData>
                <Type>1</Type>
                <UID>13394</UID>
            </TimephasedData>
            <TimephasedData>
                <Type>1</Type>
                <UID>13394</UID>
            </TimephasedData>
        </Assignment>
    </Assignments>  

    <BoardColumns>
        <BoardColumn>
            <UID>1</UID>
            <GUID>43E41B9B-12FA-E811-9DD3-2016B93223A9</GUID>
            <ID>0</ID>
            <Name>Backlog</Name>
        </BoardColumn>
        <BoardColumn>
            <UID>2</UID>
            <GUID>44E41B9B-12FA-E811-9DD3-2016B93223A9</GUID>
            <ID>1</ID>
            <Name>Next up</Name>
        </BoardColumn>
    </BoardColumns>

    <Sprints>
        <Sprint>
            <UID>1</UID>
            <GUID>47E41B9B-12FA-E811-9DD3-2016B93223A9</GUID>
            <ID>0</ID>
            <Name>No Sprint</Name>
            <DurationUnits>39</DurationUnits>
            <Duration>PT0H0M0S</Duration>
        </Sprint>

    </Sprints>
</Project>
...