xml2array не хватает памяти

regi

Новичок
xml2array не хватает памяти

использую класс CXml2Array.php, котопый должен xml прайс лист перетащить в массив, затем этот массив я пишу в базу.
на локалхосте все отлично работает. на хостинге же выдает ошибку
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 42 bytes) in /var/www/html/admin/CXml2Array.php on line 91


если редактирую php.ini и меняю
memory_limit например на 16M, все равно не работает и пишет то же самое, причем на сервере кончается память и он подвисает.

я так понимаю, нужно отказаться от этого класса? xml файлы размером около 1 мега и в будущем будут мегов до 5
 

IntenT

SkyDiver
regi
думаешь правильно.

Надо изменить подход. концепцию твоего приложения. потому что спроектировано оно неправильно.
 

regi

Новичок
а каким способом тогда можно конвертировать xml в массив с последующим занесением в mysql?
 

MiRacLe

просто Чудо
1) php_value memory_limit 16M
в .htaccess 16 - 160 - 160 - в общем сколько хостеру не жалко ( если операция кратковременна за это не будут карать)
2) читать файл небольшими порциями [m]fopen[/m], [m]fseek[/m] , [m]fread[/m]
 

regi

Новичок
файл открывается вот так:
if(!$TplDom = domxml_open_file(realpath($InName)))
trigger_error('Error parsing the file ',E_USER_ERROR);

тут вроде никак не получится fopen использовать.


можно ли подробнее первый пункт. не совсем понятно php_value memory_limit это как?

и как именно в htaccess прописать? не совсем понял.

спасибо

-~{}~ 18.10.04 15:18:

а понял извините, но это же аналогично изменению php.ini?!

у меня подвисает сервер, в этом случае
 

MiRacLe

просто Чудо
акромя DOM есть ещё и SAX (не путать с sux! ) , а акромя domxml_open_file есть ещё [m]domxml_open_mem[/m] + то что было выше
 

regi

Новичок
domxml_open_mem работать отказывается, выводит ошибки:
Warning: domxml_open_mem(): Start tag expected, '<' not found in cat.php on line 6
Fatal error: Error parsing the file in cat.php on line 7

а по поводу SAX - я посмотрел ссылку, но как то не нашел того, что нужно...
 

regi

Новичок
спасибо за помощь.

тот парсер, что вы привели, отказывается работать с моим xml файлом =(, простенькие xml он обрабатывает, а мои нет =\

в гугле искал, но там все классы основаны на DOMXML, а решить проблему путем fread fseek я не знаю как.

-~{}~ 18.10.04 17:45:

разве никто не использовал классы для перевода xml-баз данных в массив?
 

MiRacLe

просто Чудо
как так отказывается ? так и говорит - "Молодой человек,не буду без барышей пахать...магарыч гони?"

ошибки какие?
мб файл Ваш , XML не валидный? вышеозначенным "парсером" только что "распарсил" и "распринтэрил" файл размером 1,512 Мб...
 

regi

Новичок
ничего не говорит, ошибок никаких!
print_r выводит array();

я думаю что валидный, ведь другим классом XML без особых проблем парсится и выводится в виде дерева!

-~{}~ 18.10.04 17:51:

я понял в чем дело, элементы xml файла написаны по-русски, а парсер видимо не понимает кодировки. я попробовал спарсить что-нибудь типа
<?xml version="1.0" encoding="windows-1251" ?>
<привет>test</привет>
и ничего не получилось...

-~{}~ 18.10.04 17:52:

в самом классе есть функция function getTree() а в ней строчка:
$parser = xml_parser_create('ISO-8859-1');

но на установку вместо 'ISO-8859-1' - windows-1251 выдает ошибку =(

Warning: xml_parser_create(): unsupported source encoding "windows-1251" in test\XMLParser.php on line 49
 

MiRacLe

просто Чудо
[m]iconv[/m] поможет? , честно говоря не приходилось парсить "русские" xml-ки
 

regi

Новичок
не помогает =((((((((((((((((((((((((((((((((((((

файл test.xml:
PHP:
<?xml version="1.0" encoding="windows-1251" ?>
<eng>It is ok!</eng>
<русский>Все нормально</русский>
файл test.php:
PHP:
  require_once('XMLParser.php');
  
  $fr='';
  
  $file=file("test.xml");
  foreach ($file as $row) {
   $fr.=iconv("windows-1251", "UTF-8",htmlspecialchars($row));
  }

  var_dump($fr);

  $parser = new XMLParser($fr, 'raw', 1);
  $tree = $parser->getTree();

  echo '<PRE>';
  print_r($tree);
  echo '</PRE>';
пожалуйста помогите, проект буквально горит!!!
 

XiMiK

Новичок
а конвертация тегов в транслит? может поможет (хотябы временно)
 

regi

Новичок
а как это? имеется ввиду конвертацию тегов в транслит как осуществить?
 
Сверху