![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie bardzo wiem jak nazwać temat, ale mam dość nietypowy problem i nawet nie wiem od czego zacząć, by go rozwiązać. Otóż mam skrypt, który wykonuje się kilka, czasem kilkanaście lub kilkadziesiąt minut. Skrypt ten przetwarza dokument HTML (książkę w wersji HTML), która ma sporo tekstu, od 10 MB wzwyż. Książkę muszę przepuścić przez kilka wyrażeń regularnych i HTMLPurifier (czyli sporo się tam dzieje). Całość powinno wykonywać się kilkanaście minut. Niestety nie wykonuje się - serwer Apache po 10 minutach sam się resetuje (używam WampServer pod XP). Chrome wywala Error 101: Strona internetowa jest niedostępna, natomiast Opera "Połączenie przerwane przez serwer". Gdzie szukać rozwiązania? Oczywiście mam ustawione odpowiednio memory_limit czy max_execution_time na odpowiednio duże wielkości. Ps. gdy dam plik HTML ważący powiedzmy 5MB i wykonujący się 5 minut to nic się nie wysypuje... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 9 Dołączył: 21.05.2004 Skąd: Glogau/Breslau Ostrzeżenie: (0%) ![]() ![]() |
Zwiększ sobie limit ilości RAMu i czasu wykonywania skryptu, ew. odpal to z linii komend. Na windowsie też można.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zwiększ sobie limit ilości RAMu i czasu wykonywania skryptu, ew. odpal to z linii komend. Na windowsie też można. nie da rady Niestety problemu dalej nie rozwiązałem. Mam ogromne dokumenty HTML i muszę je dzielić na kilka mniejszych. W jaki sposób to osiągnąć, może ktoś coś podobnego robił kiedyś? (IMG:style_emoticons/default/wink.gif) Ten post edytował kilas88 22.06.2011, 00:21:06 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
nie da rady Niestety problemu dalej nie rozwiązałem. Mam ogromne dokumenty HTML i muszę je dzielić na kilka mniejszych. W jaki sposób to osiągnąć, może ktoś coś podobnego robił kiedyś? (IMG:style_emoticons/default/wink.gif) poszukaj w google pod hasłami SAX PHP. Przy parsowaniu dużych plików XML korzystam z XML Parser (nie jest wczytywany cały plik na raz) - jednak musisz napisać sobie obiekt/klasę routera zdarzeniowego do przekierowywania na odpowiednie metody w danym momencie... możesz skorzystać także z XMLReader - całość też możesz obudować jakimś interfejsem zdarzeniowym (zdarzeniówka chyba tu się najlepiej sprawdzi) i obrabiać tylko to co potrzebne... w sumie z niego nie korzystałem ale zdarzeniowy interfejs możesz oprzeć o metodę read i sprawdzać nodeType jeśli przekraczasz pamięć, to nie możesz na raz wczytać całego dużego dokumentu - obie powyższe klasy umożliwiają Ci parsowanie dokumentu partiami i o ile dobrze to rozpiszesz sobie umożliwiają przeglądanie struktury drzewa ;] Ten post edytował zegarek84 22.06.2011, 09:53:16 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 305 Pomógł: 25 Dołączył: 27.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Poza tym co już powiedzieli koledzy czyli - zwiększ limit ramu (sprawdź czy na pewno go dobrze zwiększyłeś - WAMP ma pewnie kilka plików konfiguracyjnych więc musisz znaleźć ten prawidłowy) - podziel jakoś ten plik na fragmenty (akapity, div?) A moja rada to nie używaj do tego php (IMG:style_emoticons/default/tongue.gif) Napisz program w C lub Javie, na pewno sobie poradzi z tym dużo lepiej:) - nie da rady zwiększyć ramu - nie każę klientowi kupić lepszego hostingu, bo nie potrafię/nie chce mi się czegoś tam zrobić (w tym przypadku porcjować dane wejściowe) - do operacji tekstowych podobno mistrzem jest Perl, ale tutaj też byłby problem z serwerem - poza tym aplikacja którą tworzę ma być odpalana raz na miesiąc, więc wydajność na drugim miejscu Oprócz tego, że napisałeś, że "masz duuuży plik, który wykonuje się dłuuugo", to nie podałeś żadnych rzeczowych informacji więc skąd mamy wiedzieć jaka jest sytuacja, wrzuć kod php jakim to obrabiasz, wrzuć jeden przykładowy dokument html i wtedy możemy spróbować Ci pomóc bo tak to można się jedynie w zgadywanki bawić - mam plik HTML z książką, który zajmuje powiedzmy 10 MB; to przepuszczam przez HTMLPurifier celem formatowania i wywalania/dodawania pewnych elementów i zonk Musisz obrabiać partiami. Użyj Crona. Jak nie braknie ci pamięci, to przekroczysz czas wykonywania skryptu. Zwłaszcza jak masz serwer współdzielony. - do tego też już doszedłem (IMG:style_emoticons/default/wink.gif) poszukaj w google pod hasłami SAX PHP. Przy parsowaniu dużych plików XML korzystam z XML Parser (nie jest wczytywany cały plik na raz) - jednak musisz napisać sobie obiekt/klasę routera zdarzeniowego do przekierowywania na odpowiednie metody w danym momencie... możesz skorzystać także z XMLReader - całość też możesz obudować jakimś interfejsem zdarzeniowym (zdarzeniówka chyba tu się najlepiej sprawdzi) i obrabiać tylko to co potrzebne... w sumie z niego nie korzystałem ale zdarzeniowy interfejs możesz oprzeć o metodę read i sprawdzać nodeType jeśli przekraczasz pamięć, to nie możesz na raz wczytać całego dużego dokumentu - obie powyższe klasy umożliwiają Ci parsowanie dokumentu partiami i o ile dobrze to rozpiszesz sobie umożliwiają przeglądanie struktury drzewa ;] piękna odpowiedź, właśnie tego szukałem / potrzebowałem - dzięki wielkie (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 19:20 |