Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne odświeżanie bardzo długo wykonującego się skryptu
Forum PHP.pl > Forum > PHP
Mody23
Witam!

Posiadam skrypt, którego wykonanie trwa bardzo długo. Zabawa z set_time_limit() też nie pomaga. Oczywiście przy użyciu tego atrybutu skrypt potrafi pracować o wiele dłużej niż bez tego, ale i tak jest to za mało, aby skrypt podołał do końca, dlatego zastanawiam się czy da się jakoś zrobić odświeżanie, powiedzmy co 20 sekund, a po odświeżeniu skrypt zaczynałby pracę od momentu, w którym skończył przed odświeżeniem?

Wiem, że można kombinować z przekierowaniami, np.:

Kod
test.php?zacznij_id=545


w gecie można wrzucić miejsce, w którym zatrzymał się skrypt i viola, aczkolwiek nie do końca mi to rozwiązanie odpowiada. Da się bezpośrednio takie odświeżenie wrzucić w skrypt i zacząć pracę od momentu, w którym skrypt zakończył działanie?
IceManSpy
Nie ma możliwości takiej możliwości.

Co ten skrypt robi, że to aż tyle czasu mu zajmuje? Może podzielić go na mniejsze sekcje? Albo w ogóel użyć innego jązyka?
Mody23
To taki jakby spider latający po stronie i analizujący jej zawartość.
A czy jeśli wrzucę ten plik do crona (potrzebuję odpalić go raz na dobę) to cron sobie da rade czy też się zawiesi i dostanie błąd o przekroczonym limicie czasu?
Pyton_000
Ogólnie php w wersji CLI czyli z konsoli nie ma limitu czasu wykonania domyślnie.

Aczkolwiek jeżeli to nie jest VPS lub Dedyk to na 90% takie ograniczenie jest ustalone.

Co do odświeżania to możesz bieżący progres zapisywać np. w pliku i przy odświeżeniu sprawdzić czy plik istnieje i odczytać początek od którego ma zacząć.

Po skończeniu plik usuwasz i tyle.
Dodatkowo w skrypcie dzięki temu możesz ustalić limit np. 500 operacji i koniec. Tak odpalany skrypt aż będzie brak wyników. Wtedy tylko do Crona powiedzmy co 10 min.
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.