Данный код формирует из XML файла SQL запрос.
$data=file_get_contents($uploads.$filename);
$xmlf=new SimpleXMLElement($data);
$g_table='SET NAMES "utf8";';
$g_table.='INSERT INTO groups (group_id,group_name) VALUES ';
foreach ($xmlf->gr as $group) {
$g_table.='('.$group['group_id'].','.$group['group_name'].'),';
}
$g_table=rtrim($g_table,',');
$g_table.='ON DUPLICATE KEY UPDATE group_id=VALUES(group_id),group_name=VALUES(group_name)';
$g_table_file=fopen('sqlfiles/groups.sql','w');
$file_bool['g_table']['file']=fwrite($g_table_file,$g_table);
fclose($g_table_file);
$file_bool['g_table']['query']=$this->query($g_table);
unset($g_table);
unset($g_table_file);
unset($xmlf->gr);
Аналогичная конструкция используется и для других таблиц.
XML выглядит так:
<Main>
<!--- ~200 строк -->
<gr group_id="101" group_dependence="0" group_name="Группа такая-то" group_description="''"/>
<!--- ~11000 строк -->
<gp group_id="1897" ppl_name="Иванов Иван Иваныч" tgl="5"/>
<!--- Еще ~30к строк с различными именами и параметрами -->
</Main>
Почему все в одном родительском узле? Проще и быстрее доступ с помощью SimpleXML.
Почему такой хреновый код, ведь можно было сделать один блок, который будет генерировать весь код? Потому что это временно, хотя нет ничего более постоянного, чем что-то временное.
Данная конструкция кушает очень много памяти, а разделять один xml на несколько, в последствии их отдельно обрабатывать - не вариант.
Собственно вопрос: можно ли обработать xml так, чтоб единомоментно мне не понадобилось over9000 памяти? Или все же придется увеличивать лимит? Увеличивать лимит не хочу не просто из-за того, что не хочется, а потому что кажется что если мне нужно его увеличивать, то я что-то делаю не так и можно сделать лучше.