Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja kodu php pobierającego dane z XML'a
Forum PHP.pl > Forum > XML, AJAX
mandark_zg
Witam, mam taki kod w PHP:

  1. <?php
  2. $filename = "1.xml";
  3. $handle = fopen($filename, "r");
  4. $contents = fread($handle, filesize($filename));
  5. fclose($handle);
  6. $limit = substr_count($contents, '<row>');
  7. $atryb = simplexml_load_file('1.xml');
  8. if($atryb)
  9. {
  10. foreach ($atryb->tables->table[0]->rows as $p)
  11. {
  12. for ($i=0; $i<$limit; $i++)
  13. {
  14. $data = $p->row[$i]->f[2];
  15. $czas = $p->row[$i]->f[3];
  16. $user = $p->row[$i]->f[6];
  17. $kod = $p->row[$i]->f[7];
  18. if ($user != 'null')
  19. {
  20. echo $data . " // " . $czas . " // " . $user . " // " . $kod . " <br />";
  21. }
  22. else {}
  23. }
  24. }
  25. }
  26. ?>


Linijka kodu
  1. $limit = substr_count($contents, '<row>');

"Oblicza" ilość paczek danych - pomiędzy <row> i </row> zamieszczonych jest 9 par <f></f> w których zamieszczone są dane które mnie interesują.
Skrypt jak najbardziej działa z tym, że przy 496645 paczkach danych z polami <f></f> wykonanie trwa bardzo długo.
Moje pytanie brzmi czy Ktoś ma pomysł na przyśpieszenie jego działania.
Za wszelką pomoc, pomysły i sugestie będę bardzo wdzięczny smile.gif

XLM wygląda następująco:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml:stylesheet type="text/xsl" href="XMLtoHTMLTransform.xsl"?>
  3. <db xmlns:roger="http://www.blablabla.pl"><params><param name="parser_version" value="2.6"/>
  4. <param name="data_type" value="Events"/>
  5. <param name="created" value="2011-09-21T08:39:08"/>
  6. <param name="PRMaster_version" value="4.3.3.516"/></params>
  7. <tables><table name="EventsCache">
  8. <fields>
  9. <field name="ECUniqueID" type="Integer"/>
  10. <field name="ECID" type="AutoInc"/>
  11. <field name="ECDate" type="Date"/>
  12. <field name="ECTime" type="Time"/>
  13. <field name="ECCode" type="Integer"/>
  14. <field name="ECUserID" type="Integer"/>
  15. <field name="ECUserGUID" type="String"/>
  16. <field name="ECReaderID" type="Integer"/>
  17. <field name="ECDoorType" type="Integer"/>
  18. </fields>
  19.  
  20. <rows>
  21. <row>
  22. <f>2511795</f>
  23. <f>1133366</f>
  24. <f>2010-11-01</f>
  25. <f>00:04:00</f>
  26. <f>142</f>
  27. <f>268435456</f>
  28. <f>null</f>
  29. <f>4</f>
  30. <f>32</f>
  31. </row>
  32. <row>
  33. <f>2511796</f>
  34. <f>1133367</f>
  35. <f>2010-11-01</f>
  36. <f>00:04:10</f>
  37. <f>143</f>
  38. <f>268435456</f>
  39. <f>null</f>
  40. <f>4</f>
  41. <f>32</f>
  42. </row>
  43. ...
erix
Czytaj strumieniowo: XML_Reader.

Ale nie jest to takie przyjemne w pisaniu jak SimpleXML. Co nie zmienia faktu, że działa piorunująco szybko.
mandark_zg
Faktycznie XML_Reader jest 1000000 razy szybszy od SIMPLEXML_LOAD_FILE specool.gif

Teraz pozostało tylko dobrać się bezpośrednio do tego co wyrzuca yahoo.gif

Myślę, że jakoś sobie z tym poradzę laugh.gif

Dzięki bardzo za pomoc thumbsupsmileyanim.gif
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.