![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Szukałem szukałem i nie znalazłem nic na ten temat. Problem wygląda następująco. Mam pewien system który za pomocą xml_parser()" title="Zobacz w manualu PHP" target="_manual parsuje pliki xml z danymi. Cały kod:
Przy małych plikach np 2,3,5 mb (1000-3000 linii) wszystko wygląda dobrze, jednak w przypadku gdy plik ma np 100 mb. (100 000 linii) Albo pobiera tylko część np pierwsze 100 linii, albo po prostu nie uruchamia się i wyświetla się biały ekran. Oczywiście podanie na początku
nic nie daje. Czy metoda xml_parser() posiada jakieś ograniczenia. Co może być przyczyną tego nie mogę parsować dużych plików ? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Zawsze jak miałem parsować duże pliki XML (kilkadziesiąt MB i więcej), korzystałem z XMLReader. Nigdy mnie nie zawiodło.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 18 Dołączył: 23.08.2003 Skąd: Łomża Ostrzeżenie: (0%) ![]() ![]() |
Ja ostatnio parsowałem XML`a o wielkości 200mb (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) simplexml tutaj nie ma sobie rownych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) szybciutko i bez problemu. Kod:
pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
No właśnie to są bardzo fajne rozwiązania , ale co kiedy serwer ich nie obsługuje (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) I tutaj jestem skazany na xml_parse()
|
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 18 Dołączył: 23.08.2003 Skąd: Łomża Ostrzeżenie: (0%) ![]() ![]() |
No właśnie to są bardzo fajne rozwiązania , ale co kiedy serwer ich nie obsługuje (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) I tutaj jestem skazany na xml_parse() popros dostawce o doinstalowanie pakietu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) simplexml jest wrecz domyslnym pakietem! jezeli w twoim hostingu go nie ma i dostawca nie chce go dograc - zmien hosting! polecam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Nie znam xml_parse więc nie wiem, czy są jakieś ograniczenia na ilość danych. Jedyna klasa jaką znam do XML, która się nie wyłoży przy dużym pliku to właśnie XMLReader. Wszystkie inne rozwiązania (w tym SimpleXML) wywalały się. Jeśli nie masz możliwości skorzystać z dobrodziejstw tej klasy, to będziesz musiał podzielić plik XML na kilka mniejszych.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
popros dostawce o doinstalowanie pakietu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) simplexml jest wrecz domyslnym pakietem! jezeli w twoim hostingu go nie ma i dostawca nie chce go dograc - zmien hosting! polecam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dobry pomysł (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) hehe Poczytałem troche o XMLReader jak podał batman i powiem że metoda jest genialna ! Może uda mi się przekonać dostawcę o jej uruchomienie. Dzięki Panowie ! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Sajrox 17.12.2008, 20:19:23 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie z xml_parse jest banalnie proste. Wystarczy wgrywać xml po kawałku. Czyli robisz pętlę while($xml =fread($fp, 1024)) ...
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Trochę odświeżę temat (IMG:style_emoticons/default/smile.gif)
Aco w sytuacji gdy parsowanie zostanie przerwane w połowie? W tej chwili próbuję z fseek() oraz ftell() Jednak gdy zaczynam parsować plik od połowy parser się wysypuje. Próbowałem dodać przy starcie parsowana od półowy pliku: Kod <?xml version="1.0" encoding="ISO-8859-2"?> Jednak nic to nie dało :/ xml_parse() wywała błąd (IMG:style_emoticons/default/sad.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 12:02 |