Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: subskrypcja
Forum PHP.pl > Forum > Przedszkole
fido20
Witam,

Na swojej stronie mam system subskrypcji, dla ludzi którzy podadzą swojego maila rozsyłana jest wiadomość w momencie gdy ktoś z użytkowników doda na stronę nową informację. Niestety obecne rozwiązanie jest dosyć uciążliwe dla tych osób które informację dodają , a mianowicie problem tkwi w tym że niektórzy mają po 200 - 300 subsryptorów (nie wiem jak to napisac ) . Czas potrzebny na pobranie danych o mailach i wysłanie na każdy adres odpowiedniego maila , przekracza maksymalny czas oczekiwania przeglądarki na odpowiedź z serwera. Co za tym idzie użytkownik zamiast zobaczyć potwierdzenie dodania informacji widzi "Nie można wyświetlić strony ...". Wpadłem na pomysł żeby sam proces rozsyłania maili był realizowany w ten sposób , że kawałek kodu odpowiedzialny za rozsyłanie umiesciłbym w oddzielnym pliku który byłby wykonywalny z powłoki i nie zwracał żadnych informacji zwrotnych do użytkownika, (tak jakby wykonywany byłby w tle) . Nie wiem czy dobrze wytłumaczyłem o co mi chodzi , może dam tu prosty przykład . Użytkownik dodaje info, info wpisywane jest do bazy danych , jeżeli wpisało się ok , wysyłane jest polecenie do systemu "uruchom skrypt wyslij.php z parametrem user = nazwa uzytkownika" a kolejna linijka kodu to potwierdzenie dodania wpisu do bazy wyświetlana w przeglądarce użytkownika. W tym miejscu chciałbym się spytać , czy to wogle jest do zrealizowania i czy rozwiąże to problem przekraczania czasu na odpowiedz z serwera . No i ew czy jest jakieś inne , lepsze, bardziej eleganckie , ogólnie lepsze rozwiązanie takiego problemu . Problem ten pojawia się gdy użytkownik ma "zapisanych na siebie" z 100 - 200 maili .

Pozdrawiam
scanner
Wybranie adresów z bazy i wysłanie meila zajmuje więcej niż 30 sekund?
Masz niezły bajzel w kodzie moim zdaniem.
vala
albo serwer smiga na jakims starym procku:)
DavidPL
Mam inną propozycje.
Maile wysyłasz w pętelce, więc w pętelce możesz także sprawdzać czas działania skryptu. Jeśli przekroczy powiedźmy 25 sekund robisz zrzut tego co pozostało do sesji, a użytkownikowi pokazujesz informację (może być w %) ile już się wysłało i robisz odświeżenie strony i wysyłasz kolejne dane.

Może nie jest to jakiś super wyrafinowany sposób ale pozwili użytkownikowi kontrolować proces wysyłania i zapewni mu podgląd stanu wysyłki.
fido20
Cytat(scanner @ 2005-04-06 07:24:59)
Wybranie adresów z bazy i wysłanie meila zajmuje więcej niż 30 sekund?
Masz niezły bajzel w kodzie moim zdaniem.

Kod odpowiedzialny za wysyłke wygląda tak


  1. <?php
  2.  
  3. $sql = &#092;"SELECT mail FROM tabela WHERE user='$uzytkownik'\";
  4. $wykonaj = mysql_query ($sql);
  5. while($wiersz = mysql_fetch_array($wykonaj))
  6. {
  7. $mail = $wiersz['mail'];
  8. $wiadomosc = &#092;"tresc\";
  9. $header = &#092;"From: rnReply-To: rn\";
  10. mail (&#092;"$mail\", \"temat\", $wiadomosc, $header);
  11. }
  12.  
  13. ?>


Nic innego nie przyszło mi do głowy , nie wiem czy jest tu jakiś bałagan , aż tak zaawanosowany nie jestem by to ocenić smile.gif
mike
Nie wysyłaj tych maili w pętli.
Zainteresuj się jakąś klasą, która robi to na poziomie bezpośredniej komunikacji z serwerem SMTP.
Np.: PHPMailer
fido20
Cytat(mike_mech @ 2005-04-06 12:26:30)
Nie wysyłaj tych maili w pętli.
Zainteresuj się jakąś klasą, która robi to na poziomie bezpośredniej komunikacji z serwerem SMTP.
Np.: PHPMailer

Za Twoją radą zainteresowałem się to klasą , jednak nie wiem jak ją wykorzystać aby nie używając pętli wysłać jednego maila do wielu osób sad.gif
mike
  1. <?php
  2.  
  3. require(&#092;"class.phpmailer.php\");
  4.  
  5. $objMail = new PHPMailer();
  6.  
  7. $objMail->From  = &#092;"list@mydomain.com\";
  8. $objMail->FromName = &#092;"List manager\";
  9. $objMail->Host  = &#092;"smtp1.site.com\";
  10. $objMail->Mailer  = &#092;"smtp\";
  11.  
  12. $arrEmail = array( 'jeden@serwer.pl', 'dwa@serwer.pl', 'trzy@serwer.pl', 'cztery@serwer.pl' );
  13.  
  14. $objMail->Body  = 'Body';
  15.  
  16. for( $i = 0, $intLast = count( $arrEmail ); $i < $intLast; $i++ )
  17. {
  18. $objMail->AddAddress( $arrEmail[ $i ] );
  19. }
  20.  
  21. $objMail->Send();
  22.  
  23. ?>
fido20
A może wiesz czy jest jakiś sposób żeby "przysłonić" te wszystkie adresy email np zeby zamiast serwer@jede.pl; serer@dwa.pl ... bylo tylko np Subskrypcja (w polu do jak się list np w outlooku otworzy)

Jakby to dało sie jeszcze zrobić byłoby po prostu super smile.gif
mike
Przyznam że nie za bardzo wiem o co ci chodzi ( nie używam Outlook'a ), ale podejrzewam że o to :
  1. <?php
  2.  
  3. require(&#092;"class.phpmailer.php\");
  4.  
  5. $objMail = new PHPMailer();
  6.  
  7. $objMail->From  = &#092;"list@mydomain.com\";
  8. $objMail->FromName = &#092;"List manager\";
  9. $objMail->Host  = &#092;"smtp1.site.com\";
  10. $objMail->Mailer  = &#092;"smtp\";
  11.  
  12. $arrEmail = array( 
  13. array( 'jeden@serwer.pl', 'Mike' ),
  14. array( 'dwa@serwer.pl', 'Ziutek' ),
  15. array( 'trzy@serwer.pl', 'Koleś' ),
  16. array( 'cztery@serwer.pl', 'Ktoś' )
  17. );
  18.  
  19. $objMail->Body  = 'Body';
  20.  
  21. for( $i = 0, $intLast = count( $arrEmail ); $i < $intLast; $i++ )
  22. {
  23. $objMail->AddAddress( $arrEmail[ $i ][ 0 ], $arrEmail[ $i ][ 1 ] );
  24. }
  25.  
  26. $objMail->Send();
  27.  
  28. ?>
fido20
O coś takiego , dzięki smile.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.