Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak skopiować zawartość pliku XML(34MB) do bazy MySQL?
Forum PHP.pl > Forum > XML, AJAX > XML
MOniToR
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
Riklaunim
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).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.