Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Częściowe odpowiedzi od serwera?
Forum PHP.pl > Forum > Po stronie przeglądarki
woroo
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?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
slammer
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.
woroo
hej dzięki za podpowiedź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
krowal
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)
woroo
Dzięki, jakoś tak więc spróbuję biggrin.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.