Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sleep() <- php / zawiasy mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
heracles
Witam,

mam jeden drobny problem. Mam system mailingowy. Aby wiadomość nie była uznawana za spam muszę je wysyłać z sleepem czasowym. Dla bezpieczeństwa rejestruję informacje o tym do którego usera został wysłany email. Po raz drugi zdarzył mi się przypadek, że wywalił mi problem z zapisem do bazy.

Wczesniej nie mialem funkcji sleep() phpca i nie wyskakiwał mi taki problem. Obecnie jest z tym dylemat. Nie wiecie czy do tego ma coś wspólnego sleep() phpca, czy tak defakto sleep moze gubic sesje itp ?

Prosze o pomoc, z góry wielkie dzięki
sowiq
Cytat(heracles @ 16.02.2009, 15:06:18 ) *
Po raz drugi zdarzył mi się przypadek, że wywalił mi problem z zapisem do bazy.
To może oznaczać, że w którymś miejscu jest jakiś bliżej nieokreślony błąd.
Cytat(heracles @ 16.02.2009, 15:06:18 ) *
Wczesniej nie mialem funkcji sleep() phpca i nie wyskakiwał mi taki problem. Obecnie jest z tym dylemat.
Patrz wyżej.
Cytat(heracles @ 16.02.2009, 15:06:18 ) *
czy tak defakto sleep moze gubic sesje itp ?
Nie.

Podasz więcej szczegółów, czy będziesz czekał na kolejne odpowiedzi podobne do mojej? Jakiś komunikat błędu? Kawałek kodu? Cokolwiek?
heracles
Cytat(sowiq @ 16.02.2009, 15:17:23 ) *
Patrz wyżej.Nie.

Konkretnie chodzi mi o to, ze wcześniej przed wprowadzeniem sleepa nie było problemu z tym, ale wiadomości lądowały jako spam, bo tak byly rozpoznawane np przez gmail`a

a co do kodu, nie moge udostepnic - wlasnosc firmy, jedynie co moge opisac

foreach($tablica userow as $user) //
{
if(sendMail::execiute('nadawca', tytul, opis, $user, $wiadomosc['html'] ? 'html' : 'txt') ){ // wysyaleni wiadomosci
$query='zapisz do bazy danych info o userze INSERTEM'; // zapytanie jest poprawne
if(!$db->query($query)){ //zapisywanie do bazy danych
throw new Exception('Blad bazy danych - zapis o wyslaniu juz do usera wiadomosci'); // jezeli zapis nie zostanie wykonnany wyswietla sie blad i przerwanie operacji
}
sleep(1);
}
}
sowiq
Jaki rozmiar ma $tablica_userow? Bo biorąc pod uwagę, że na każdego maila przeznaczasz 1 sek + czas wysyłania maila, to przy ~55 userach robi Ci się już około 60 sek. Po tym czasie połączenie do MySQL może być automatycznie przerywane. Sprawdź to. Jeśli tak jest, to dziel mailing na mniejsze porcje.
heracles
Baza mysql dziala normalnie przy operacjach zajmujace nawet 2-3 godziny. Często tak jest, że baza jest długo w połączeniu i nie ma to tutaj żadnego znaczenia.

Najprawdopodobniej wygląda to tak, że tabela ta jest InnoDB ... byc moze najlepszym postepem bedzie w przypadku nie wykonania zadania wrzucenie destrojda zmiennej db i utworzenie na nowo polaczenia z powtornym zapytaniem.
djstrong
Można sprawdzać połączenie przed dodaniem funkcją mysql_ping i przy negatywnej odpowiedzi na nowo łączyć się z bazą.
heracles
Mozna, ale jezeli podczas wykonywania 1000 dobrych insertow wyskoczy nagle syf ... najlepiej (co juz dziala) w przypadku niewykonania operacji polaczyc sie z baza jeszcze raz (unikajac singeltona) i w tym przypadku na nowo dokonac wpisu insert ... dziala i nie ma problemu :]
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.