Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował MOniToR 22.03.2010, 17:03:49
Go to the top of the page
+Quote Post
Riklaunim
post
Post #2





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

Ostrzeżenie: (0%)
-----


Plik ładowany jest do pamięci na którą jest limit. Rozbij operacje na etapy (najlepiej rozbić plik), lub nie wyświetlaj bez potrzeby danych (bo tam może następować wrzucenie wszystkiego do RAM).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 12:35