![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich:)
Potrzebuję pomocy w rozwiązaniu następującego problemu (nie wiem czy tytuł tematu dosadnie opisuje problem, i mam nadzieję, że nie będzie zaraz z tym problemów): 1. Mam napisaną funkcje w php która wykonuje pewne operacje na pewnym rodzaju plików (dla ułatwienia przyjmijmy, że mówimy o plikach graficznych, a operacja to np. zmniejszenie rozmiaru). 2. Wykonanie "operacji" na każdym pliku trwa od 2 - 10 sekund. 3. Posiadam na serwerze docelowym już w jakimś katalogu "xyz" 1000 takich plików, na których będę chciał wykonać tę operację. 4. No i napisałem stronę w php która wykonuje tę funkcję dla każdego pliku znajdującego się w "xyz". 5. Teraz osoba która wchodzi sobie na tę stronę w swoim domu ma chciałaby "przetworzyć" wszystkie te pliki - no ale to nie ma prawa zadziałać, bo jest timeout, i to jest ten problem;) Pragnąłbym uzyskać coś takiego: że jak w pkt. 5 osóbka sobie wchodzi na stronę to ten skrypt się zaczyna wywoływać i po "przetworzeniu" każdego pliku (albo kilku) było by odświeżenie (lub jakieś częściowe odświeżenie) strony u użytkownika, by ten wiedział co się działo i że w ogóle coś się dzieje... Jest jakiś sposób żeby na stronie przez www sprawdzić czy się jakiś skrypt wykonuje, że się skończył wykonywać, mieć dostęp do jakichś zmiennych współdzielonych ze skryptem, abo żeby skrypt od strony serwera jakoś odświeżył coś na stronie?(IMG:style_emoticons/default/questionmark.gif) Prosiłbym o nakierowanie na jakąś technologię, w której mógłbym to zrobić, zaprząc do tego JavaScript, jQuery, co innego. Bo nawet nie wiem jak to nazwać by w googlach szukać... Nie mam możliwości zmiany parametrów samego serwera ani pliku php.ini. Wiem że można by to co mi potrzebne osiągnąć przez fluch() i ob_flusch() ale to by wymagało użycia set_time_limit(), a tego nie mogę bo php jest odpalone w safe mode i nie mogę tego zmenić... Z góry dziękuję za odpowiedzi/podpowiedzi Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 187 Pomógł: 6 Dołączył: 31.08.2005 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli nie zależy Ci na wydajności, to po prostu wykonuj np. po 3-5 zapytań ajax (asynchronicznie) i po wykonaniu wszystkich lub jednego z nich odpalaj kolejne. Oczywiście cały czas pokazując jakiś preloader.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
hej dzięki za podpowiedź(IMG:style_emoticons/default/smile.gif)
tez już o czymś takim myślałem, ale zastanawiam się czy nie ma jakiegoś "ładnego" sposobu - najlepiej wzorca: "tak to się robi":D |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym zrobił tak:
Gdy użytkownik klika na link 'przetwórz': - ajaxem uruchamiasz skrypt przetwarzający, skrypt ten po przetworzeniu każdego pliku zapisuje licznik przetworzonych plików w sesji - jednocześnie uruchamiasz przez var interval = setInterval() (w JS) pętlę sprawdzających wywołań ajaxowych, które wywołują się powiedzmy co 2-3s i odwołują sie do skryptu, który pobiera z sesji i zwraca ilość przetworzonych plików - zwróconą ilość możesz pokazać użytkownikowi (np 10/100) i zmieniać po każdym sprawdzeniu - jeśli ilość przetworzonych jest równa ilości wszystkich to kończysz wywoływanie sprawdzania przez clearInterval(interval) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, jakoś tak więc spróbuję (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 14:15 |