Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка при разборе XML-файла - No memory

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Good_luck
Отправлено: 25 Февраля, 2013 - 15:31:35
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




При разборе xml файла весом больше 10 Мб функция xml_parse возвращает ошибку: No memory. На сервере стоит версия php 5.3, раньше стояла php 5.2 - ошибок не возникало.

memory_limit в php.ini - 3000 Mb

Подскажите в чем может быть проблема?

PHP:
скопировать код в буфер обмена
  1.  
  2.   $parser = xml_parser_create();
  3.  
  4.     xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8").
  5.    
  6.     xml_set_object($parser, $this);
  7.     xml_set_element_handler($parser, 'start_element', 'end_element');
  8.    
  9.     if (!xml_parse($parser, $content)) {
  10.       $parse_error = 'Line '.xml_get_current_line_number($parser).': '.(xml_get_error_code($parser)?xml_error_string(xml_get_error_code($parser)):'Unknown error'); // Line 205454: No memory    
  11.     }
  12.  
  13.     xml_parser_free($parser);
 
 Top
esterio
Отправлено: 25 Февраля, 2013 - 15:33:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




simplexml пробовали?
 
 Top
Good_luck
Отправлено: 25 Февраля, 2013 - 15:48:32
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




esterio пишет:
simplexml пробовали?


Нужно именно через xml_parse (придется уже многое переписывать). Ведь на php 5.2 все работало отлично. И ещё заметил, что строка на которой происходит ошибка является последней в xml-файле.
 
 Top
webbear
Отправлено: 01 Октября, 2013 - 09:45:57
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




У меня такая же проблема. Пи переезде на новый сервер на CentOS 6.4. проявилась (на FreeBSD таких глюков с этим скриптом не было). С памятью там всё в порядке (3 гига для PHP) - такое ощущение что не работает именно библиотека.

Может удалось выяснить в чём проблема?
 
 Top
Zuldek
Отправлено: 01 Октября, 2013 - 09:57:57
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Ну в чем ваша проблема понятно.
Суть в том, — какой парсер вы используете. Если у вас нет возможности увеличить объемы памяти до уровня, требуемого парсеру для хранения всего DOM документа, то вам нужен тот, который не хранит все дерево в памяти, то есть один из SAX-парсеров для последовательного разбора документа большого объема. Либо, — вы можете разбирать его ручками, не забывая "удалять" (для пыхи в кавычках) из памяти уже разобранные и ненужные сущности, хранящие элементы документа.
esterio пишет:
simplexml пробовали?

Плохой неправильный совет даете. Simplexml точно также хранит в памяти всё дерево DOM xml-документа.

(Отредактировано автором: 01 Октября, 2013 - 10:02:54)

 
 Top
armancho7777777 Супермодератор
Отправлено: 01 Октября, 2013 - 10:35:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Zuldek пишет:
то есть один из SAX-парсеров

DOM*

(Отредактировано автором: 01 Октября, 2013 - 10:36:42)

 
 Top
webbear
Отправлено: 03 Октября, 2013 - 09:15:07
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Это точно проблема не с памятью. При доступном объёме 3Гб и общем 32Гб, файл размером 10 Мб как бы его в памяти не хранить - это сущий пустяк. Скрипт валится на последней строке XML файла и во время выполнения xml_parse. Но малые файлы затягивает нормально...
 
 Top
webbear
Отправлено: 04 Октября, 2013 - 18:40:31
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Проблема решилась даунгрейдом libxml библиотеки. У нас используется PHP 5.2.17 (выше не позволяет устанавливать фреймворк) а версия libxml была из последних, после даунгрейда заработало.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« XML и его обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB