![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 14.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam skrypt do wysylki mailingu. Baza maili moich uzytkownikow liczy ponad 22 tysiace, wiec radze sobie tak: set_time_limit(300); pobierz 80 maili sposrod tych do ktorych jeszcze nie wyslano jezeli sa maile to w petli wyslij i zapisz, ze wyslano sleep(3); header(odswiezenie strony) jezeli nie ma juz maili header(strona glowna wysylki mailingu) I problem tkwi w tym, ze zawsze po ok 3 minutach (+/- 200 sekund) wywala mi w przegladarce: Kod Nieprawidłowe przekierowanie Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie. Czy po przekierowaniu header czas wykonania skryptu nie liczony jest na nowo? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 28.05.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przeglądarki blokują powtarzające się polecenia przekierowania, po pierwsze aby uchronić klienta przed "wędrowaniem" po wielu stronach i zbieraniem różnego rodzaju śmieci (cookiesów), a także przed wpadnięciem w nieskończoną pętlę. Zamiast funkcji header po stronie serwera może użyj meta tagu w kodzie odpowiedzi:
Skrypt może wstawiać ten tag do nagłówka html'a tak długo, aż zostaną wysłane wszystkie maile. Można też użyć ajax, który będzie w pętli wywoływał skrypt tak długo, jak długo zwraca pewną ustaloną wartość: po wysłaniu wszystkich maili skrypt zwróci pusty tekst jako odpowiedź i pętla zostanie przerwana. Zaletą ajaksowego rozwiązania jest brak migotania strony w oknie przeglądarki i możliwość zrobienia ładnego, w pełni funkcjonalnego paska postępu (wykorzystaj jQuery). Załączam gotowca (efekt prokrastynacji, czyli poniedziałkowej niechęci do zaplanowanej pracy (IMG:style_emoticons/default/smile.gif) ) Aby sprawdzić działanie wystarczy: 1. umieścić na serwerze dwa pliki: sendmail.php i mailing.html (źródła poniżej), 2. do podkatalogu js wrzucić bibliotekę jQuery http://docs.jquery.com/Downloading_jQuery 3. utworzyć w bazie danych przykładową tabelę:
i wypełnić ją danymi, lub dodać pole `status` ENUM ('waiting','sent') do swojej tabeli. Skrypt działający "w tle", realizujący wysyłanie maili partiami, zwracający do klianta informacje o procentowym postępie, lub zakończeniu wysyłki, nazwa skryptu sendmail.php
Frontend dla klienta: nazwa pliku np. mailing.html (oczywiście może być wygenerowany przez php)
Ten post edytował za017 21.12.2009, 12:10:25 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 03:19 |