|
|
|
| Делаю парсинг из удаленного xml-файла с помощью
$data = "http://site.ru/file.xml";
$xml = file_get_contents($data);
$yrl = simplexml_load_string($xml);
|
а затем разбираю его.
Но последнее время xml-файл стал очень большим и не хватеает времени на его обработку (хотя, через крон работает).
Подскажите как мне сделать, чтобы парсинг файла шел по частям, не меняя весь скрипт под такую функцию как xml_parse (узнал о ней уже после того как написал скрипт)? | |
|
|
|
|
|
|
|
для: aetern
(29.07.2012 в 19:33)
| | Загружайте его отдельным скриптом и дробите на части, с сохранением шапки, мета-информации, чтобы сохранить валидность. | |
|
|
|
|
|
|
|
для: cheops
(30.07.2012 в 08:11)
| | Спасибо за идею, попробую.
...
Вот я скачиваю свой xml файл (около 25 мб), а затем как лучше поступить?
Дробить этот файл на 10 других файлов и обрабатывать по очереди?
И какой размер файла для simplexml_load_string() считать приемлеммым?
Спасибо. | |
|
|
|
|
|
|
|
для: aetern
(30.07.2012 в 19:22)
| | Сильно зависит от того, какое ограничение по памяти для скрипта выставлено на вашем сервере (можно посмотреть в отчете функции phpinfo()). Если 8 Мб, лучше разбивать на фрагменты в 4Мб, если 16 - 10Мб. | |
|
|
|
|
|
|
|
для: cheops
(31.07.2012 в 07:37)
| | стоит
memory_limit 128M
или нужно смотреть другой параметр (Directive)?
Я разбиваю на части и обрабатываю файлы в цикле for():
for($i=1; $i<=$fcount;$i++) {
if (file_exists('out/part'.$i.'.xml')) {
$yrl = simplexml_load_file("out/part".$i.".xml");
// и т.д....
| , но все равно времени не хватает. Он обрабатывает сколько успевает и заканчивает по окончанию лимита времени.
Нужно, видимо, делать какие-то стопы между каждым файлом...
Подскажите, как мне нужно построить работу? | |
|
|
|
|
|
|
|
для: aetern
(31.07.2012 в 22:52)
| | set_time_limit(0) | |
|
|
|
|
|
|
|
для: ONYX
(01.08.2012 в 04:45)
| | Решил задачу так:
1) делю xml на 5мб файлы и записываю их у себя
2) проверяю наличие файлов в директории и обрабатываю первый
3) если файлов в директории нет возвращаюсь к п.1)
Поставил все это на крон на каждый час.
Как вы думаете, если я переделаю парсер с SimpleXML,на потоковый (XMLReader), моя проблема решиться? Или XMLReader берет столько же времени? | |
|
|
|