Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> rozsylanie maili
arti1
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 18.11.2003

Ostrzeżenie: (0%)
-----


A teraz cos takiego:

w MySQL'u trzymam adresy email (kolo 1000). Chce zrobic wysylanie - wybieram najpierw do kogo (np. dla osob w wieku 10 -20lat). Wpisuje tresc (html).

Dobra, teraz chce wyslac (w skrocie):
[php:1:4c51decccd]<?php


#do kogo
$query = "SELECT DISTINCT email FROM tabela";
$mysql_result = mysql_query($query, $mysql_link);
while($row = mysql_fetch_row($mysql_result))
{
$do = $row[0];

$from = "ARTI<adres@wp.pl>";

$mailheaders="From: $fromn";
$mailheaders.="Reply-To: $fromn";
$mailheaders.="X-Mailer: PHPn";
$mailheaders.="MIME-version: 1.0n";
$mailheaders.="Content-type: text/html; charset=iso-8859-2";

$wyslij=mail($do, $temat, $tresc, $mailheaders);

}
?>[/php:1:4c51decccd]


Z tym, ze przy wysylce do duzej ilosci osob (ok.500-1000) wykonywanie skryptu bedzie trwało długo.
Mysle nad takim rozwiazaniem - wysyla 50 maili i przeładowuje strone, pokazuje sie napis: wysłano do pierwszej 50-tki osob, prosze czekac wysylanie trwa nadal. Co kolejne 50 wyslanych maili, niech sie przeładowuje strona i pojawia kolejny napis. Jak to zrobić?

Samo przeładowywanie to wiem że można użyć js (location.replace).

co ważne:
wszystko sie odgrywa w pliku do ktorego kieruja dwa submity i sa warunki:
[php:1:4c51decccd]<?php


if( isset($_POST['podglad']) )
{
//pokazuje podglad
}
else if( isset($_POST['krok2']) )
{
//tu jest caly proces wysylania
}
?>[/php:1:4c51decccd]
jest to o tyle wazne ze przy przeładowywaniu strony może chyba być problem ze spełnieniem tego drugiego warunku.. czy nie?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Wsumie to sądze, że całość będzie oparta o pobieranie rekordów z parametrami
Kod
LIMIT $start,$po_ile
i przekazywanie zmiennych, które zmienią te parametry. Ale nie jestem w tym zbyt obcykany wiec prosze o wskazówki, czy dobrze kombinuje.
Go to the top of the page
+Quote Post
BzikOS
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Proszę kod php umieszczać w znacznikach [php].
Go to the top of the page
+Quote Post
talee
post
Post #3





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 7.09.2002
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat
A teraz cos takiego:
Mysle nad takim rozwiazaniem - wysyla 50 maili i przeładowuje strone, pokazuje sie napis: wysłano do pierwszej 50-tki osob, prosze czekac wysylanie trwa nadal. Co kolejne 50 wyslanych maili, niech sie przeładowuje strona i pojawia kolejny napis. Jak to zrobić?


Kombinujesz dobrze, ale znowu pod górę. Do tego typu akcji używa się register_shutdown_function(). Jeszcze raz podkreślam, że nie próbuję ci dowalić.

Pomyśl sobie tak: jak będziesz komplikował sobie rzeczy proste to co dopiero zrobisz z trudnymi.
Go to the top of the page
+Quote Post
HaRy
post
Post #4





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 15.05.2002
Skąd: Łódź

Ostrzeżenie: (0%)
-----


hmm ... a nie lepiej poprostu zwiekszyc maksymalny czas dla wykonywania skryptu? ...

odpowiada za to zmienna max_execution_time zawarta w php.ini.

mozesz zmodyfikowac jej wartosc z poziomu sktyptu (domyslnie jest to 30s.) za pomoca funkcji [manual:5c14c1b51a]ini_set[/manual:5c14c1b51a] w sposob nastepujacy:

[php:1:5c14c1b51a]<?php
ini_set('max_execution_time',600); // 600 sekund
?>[/php:1:5c14c1b51a]
Szkoda czasu na komplikowanie sobie zycia ...

Pozdrawiam.
Go to the top of the page
+Quote Post
kicaj
post
Post #5





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


a moze ignore_user_abort(); ale nie jestem pewnien czy zrozumialem
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Problem z wysyłką załatwia takie coś:
[php:1:8c019c05a8]<?php
ignore_user_abort(true);
set_time_limit(0);

//
// wyciaganie z bazy
//

echo "<meta http-equiv="Refresh" content="0; URL=innastrona.php">";

//
// tutaj wysyłanie
//
?>[/php:1:8c019c05a8]
To zabezpieczy przed kliknieciem odśwież i powtórna wysyłką, a także przed przewaniem pracy poprzez naiciśniecie "Stop" czy przekroczenie czasu pracy.
Go to the top of the page
+Quote Post
arti1
post
Post #7





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 18.11.2003

Ostrzeżenie: (0%)
-----


niestety nie działa mi:
[php:1:d63ec81981]<?phpset_time_limit(0);

?>[/php:1:d63ec81981]

wyskkuje bład:
Kod
Cannot set time limit in safe mode


Co moge zrobić, jesli nie mam u mnie na serwerze pliku php.ini. Jak wyłączyć tryb bezpieczny? Warto?


Aha i mam jeszcze takie pytanko:
widzialem kiedys (na jakims forum) cos takiego, ze po klikniecie WYSLIJ przycisk robil sie nieaktywny (DISABLED jak mniemam). Moze to byłoby dobrym sposobem na zabezpieczenie przed kliknięciem drugi raz....?
Ale jak to zrobić (pewnie przy pomoicy onClick... ale jak?)
Go to the top of the page
+Quote Post
kicaj
post
Post #8





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


no zapomniales jeszcze ignore_user_abort(true);
[php:1:870428a208]<?php
ignore_user_abort(true);
set_time_limit(0);
?>[/php:1:870428a208]
Go to the top of the page
+Quote Post
arti1
post
Post #9





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 18.11.2003

Ostrzeżenie: (0%)
-----


nie podałem tego w poscie ale nie zapomnialem ignore_user_abort(true);

mam dokladnie tak jak podales
[php:1:7a5c320751]<?php
ignore_user_abort(true);
set_time_limit(0);
?>[/php:1:7a5c320751]

i wciaz mi sie wyswietla
Kod
Cannot set time limit in safe mode


w manualu jest napisane:
Kod
Ostrzeżenie

set_time_limit() has no effect when php is running in tryb bezpieczny. There is no workaround other than turning off safe mode or changing the time limit in the php.ini.


co mam zrobić? - nie mam dostępu do ustawień php ani nie mam na serwerku pliku php.ini
Go to the top of the page
+Quote Post
tiraeth
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Powiem jedno: Nie masz szans... serwer, na którym masz konto WWW ma ustawioną opcję safa_mode (więcej o nim znajdziesz na http://php.net ) (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Go to the top of the page
+Quote Post
mateuszkrzeszowi...
post
Post #11





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 23.04.2003
Skąd: Mysłowice

Ostrzeżenie: (0%)
-----


Małe pytanko: jak zareaguje serwer na żądanie wysłania 2000 maili (newsletter)? Nie zakrztusi się? Czy będzie wysyłał w miarę możliwości? No bo w pętelce bym chciał wysyłać...

Nie chciałbym odbierać wściekłych mailii/telefonów od admina (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Wiem oszywiście że zależy to od konfiguracji itp ale ja o taką zdroworozsądkową odpowiedź proszę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 19:44