Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [xml][php][mysql]Duże pliki do bazy MySQL
b_chmura
post
Post #1





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Witam
Potrzebowałem stworzyć skrypt którym duży plik xml (prawie 250 mb) przerzucę do bazy MySQL.
Na drodze stanęły mi dwie kłody: pamięć ram komputera to tylko 64mb oraz limit wykonywania skryptu 30 sek.

Poniżej przedstawię wam kod który w moim mniemaniu teoretycznie powinien chodzić jednak wciąż dostaję informację o przekroczonym czasie.
  1. mysql_connect('xxxx', 'xxxx', 'xxxx') or die('Bład! nie można się połączyć z bazą');
  2. mysql_select_db("xxxx") or die('Błąd! nie można wybrać tabeli');
  3. mysql_query("SET NAMES 'utf8'");
  4.  
  5. $fileName = "baza-produktow.xml";
  6. $table = 'xxxx';
  7.  
  8. $_SQL['prefix'] = 'xxxx_xml_';
  9. $_SQL['table'] = $table;
  10. $_SQL['query'] = '';
  11.  
  12.  
  13. $timeLimit = ini_get('max_execution_time');
  14. $time = time();
  15. $limit = $xmlData['cnt'] = 1000;
  16. $i = (empty($_GET['start']))? 0: $_GET['start'];
  17.  
  18. while($xmlData['cnt'] == $limit)
  19. {
  20. if(date("s", time())-date("s", $time) >= ($timeLimit/2)) //teoretycznie jeśli skrypt będzie wykonywał się dłużej jak połowa ustalonego czasu strona powinna się przeładować i zacząć od momentu na którym skończyła
  21. {
  22. header("Location: ?start=".$i);
  23. break;
  24. }
  25.  
  26. $start = $limit*i;
  27.  
  28. $xmlData = getTagFromXML($fileName, $table, $start, $limit); //ta funkcja wyciąga X "rekordów" począwszy od X-ego, i oddaje w stringu
  29. $arrayData = createArrayFormXML($xmlData['data']); //ta z podanego stringa robi tablice z danymi
  30. $_SQL = createSqlForOffer($_SQL, $arrayData); //ta tworzy zapytanie sql do bazy danych
  31. mysql_query($_SQL['queryData']);
  32. mysql_query($_SQL['queryAttributes']);
  33. $i++;
  34. }


Jeśli byłby ktoś wstanie podpowiedzieć ewentualne inne rozwiązanie byłbym wdzięczny.

Pozdrawiam

Ten post edytował b_chmura 1.10.2010, 10:27:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jak rozumiem ma to być jednorazowa operacja, więc... ściągnij sobie ten plik na swój lokalny komputer, potraktuj go całego simplyxmlemem, zapisz dane do bazy, wyeksportuj bazę. Trochę czasu stracisz czekając aż dane się ściągną/wyślą, ale w tym czasie możesz porobić coś pożytecznego.

Nie będziesz się musiał bawić w jakieś partycjonowanie XMLa itp. itd.
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 02:55