Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt wykonuje się ponad 10 minut, po czym się wysypuje ;)
kilas88
post
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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
michaJlS
post
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.
Go to the top of the page
+Quote Post
kilas88
post
Post #3





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

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


Cytat(michaJlS @ 21.06.2011, 17:49:50 ) *
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
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(kilas88 @ 22.06.2011, 01:20:48 ) *
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
Go to the top of the page
+Quote Post
kilas88
post
Post #5





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

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


Cytat(jaro87 @ 22.06.2011, 07:34:23 ) *
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

Cytat(tehaha @ 22.06.2011, 10:32:58 ) *
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

Cytat(tete @ 22.06.2011, 10:37:50 ) *
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)

Cytat(zegarek84 @ 22.06.2011, 10:52:32 ) *
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)
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: 15.10.2025 - 19:20