Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak skopiować zawartość pliku XML(34MB) do bazy MySQL?, SimpleXML się sypie, a w XMLReader mam błąd Out of memory
MOniToR
post
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 2
Dołączył: 16.11.2003
Skąd: Wrocław / Skokowa

Ostrzeżenie: (10%)
X----


Witam

Mam taki problem, muszę skopiować bazę z pliku XML do bazy MySQL. Próbowałem najpierw z SimpleXML, jednak wyskakiwał mi jakiś błąd CGI i przeczytałem w internecie, że SimpleXML nie wyrabia z większymi plikami dlatego spróbowałem to zrobić z XMLReader. Niestety wyskakuje mi teraz taki o to błąd:

  1. Fatal error: Out of memory (allocated 77070336) (tried to allocate 40 bytes) in /baza.php on line 18


Zmieniałem nawet w php.ini ustawienia pamięci do 300MB ale to nic nie pomogło. Skrypt jest wykonywany na serwerze w home.pl. Co mogę zrobić? Bardzo proszę o pomoc smile.gif

O to mój kod PHP:

  1. if(!$db = mysql_connect($conf_db_dbadress,$conf_db_dbuser,$conf_db_dbpass)):
  2. else:
  3. mysql_select_db($conf_db_dbname, $db);
  4. endif;
  5.  
  6. function xml2assoc(&$xml){
  7. $assoc = NULL;
  8. $n = 0;
  9. while($xml->read()){
  10. if($xml->nodeType == XMLReader::END_ELEMENT) break;
  11. if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){
  12. $assoc[$n]['name'] = $xml->name;
  13. if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
  14. $assoc[$n]['val'] = xml2assoc($xml);
  15. $n++;
  16. }
  17. else if($xml->isEmptyElement){
  18. $assoc[$n]['name'] = $xml->name;
  19. if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
  20. $assoc[$n]['val'] = "";
  21. $n++;
  22. }
  23. else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value;
  24. }
  25. return $assoc;
  26. }
  27.  
  28. $xml = new XMLReader();
  29. $xml->open('baza.xml');
  30. $ksiazki = xml2assoc($xml);
  31. $xml->close();
  32.  
  33. $n = count($ksiazki);
  34. for ($i=0;$i<$n; $i++) {
  35. echo $ksiazki['ksiazka']['tytul'].'<br>';
  36. }


Jak widać nie próbowałem jeszcze robić zapytania do MySQl bo skrypt mi się wywala przy zwykłym echo... bardzo proszę o wszelka pomoc smile.gif

Ten post edytował MOniToR 22.03.2010, 17:03:49


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:59