kaktus283
27.10.2012, 16:14:06
Witam, mam pewien problem i niezbyt wiem jak go rozsądnie rozwiązać.
Piszę pewną większą aplikację, która będzie mieć automatyczną aktualizację w PHP (to jednak jest najmniej ważne). Mam pewien kod, który się nie przyda w niczym ale przybliżę jak to wszystko działa i czego oczekuję. Tak więc mam pętle "for", która wykonuję dosyć dużą ilość poleceń i chciał bym aby PHP zwracało mi na ekran aktualny postęp pętli. Oczywiście echo`wać mogę sobie długo i namiętnie a to i tak wyświetli się dopiero, gdy skrypt przestanie pracować. Jest jakiś sposób by pętla zwracała wynik po każdym wykonaniu, nie chcę rozwiązania tylko naprowadzenia na rozsądną drogę. Pozdrawiam.
w php to niemozliwe, jezeli zalezy Ci na takim pasku postepu musiałbys to wszystko przeniesc do ajaxa.
vokiel
27.10.2012, 17:39:52
Poczytaj o
flush,
ob_flush foreach(range(1
,9
) as $n){ }
kaktus283
29.10.2012, 18:28:18
Cytat(vokiel @ 27.10.2012, 17:39:52 )

Poczytaj o
flush,
ob_flush foreach(range(1
,9
) as $n){ }
Stworzyłem testowy plik z Twoim kodem, ale nadal dopiero po wykonaniu całej pętli wyświetla się zwrócona wartość zmiennej n.
Na dodatek strasznie długo się to wykonuje i zżera dużo pamięci RAM co jest niezbyt optymalnym rozwiązaniem.
Ma ktoś inną propozycję jak to rozwiązać bez używania AJAX`a?
vokiel
30.10.2012, 09:54:57
Jeśli to Ci nie działało, to pewnie ze względu na ustawienia php. Sprawdź ten przykład:
@ini_set('zlib.output_compression',0
); date_default_timezone_set('Europe/Warsaw');
foreach(range(1
,9
) as $n){ }
kaktus283
30.10.2012, 10:55:49
Cytat(vokiel @ 30.10.2012, 09:54:57 )

Jeśli to Ci nie działało, to pewnie ze względu na ustawienia php. Sprawdź ten przykład:
@ini_set('zlib.output_compression',0
); date_default_timezone_set('Europe/Warsaw');
foreach(range(1
,9
) as $n){ }
Nadal wyrzuca dopiero, gdy kod zakończy się wykonywać ale rozwiązałem to troszkę w inny sposób, mianowicie zapisuje liczbę zmiennej z pętli do pliku 'update.txt' a w drugim pliku użyłem odświeżania co 500ms oraz elementu <progress> do pokazania paska postępu. W każdym bądź razie dzięki wielki za pomoc : )