/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Send mange mail
Fra : Harald


Dato : 06-04-07 09:44

Hej

Jeg skal lave et script der sender en mail til en masse brugere, hvis det nu
tager længere end 30 sekunder som er default limit et script an køre og jeg
ikke har mulighed for at benytte set_time_limit() da php køre i safe mode
hvad gør man så?

Hvad er den normale fremgangs måde mht. til at sende mange mails?
Selvom jeg havde mulighed for at ændre på de 30 sek. eller benytte
set_time_limit() så syntes jeg ikke det er smart at brugeren ikke kan se at
der sker noget i de f.eks. 2 minuter det tager at sende alle mails.

/HK



 
 
Martin (06-04-2007)
Kommentar
Fra : Martin


Dato : 06-04-07 10:06

Harald wrote:
> Hej
>
> Jeg skal lave et script der sender en mail til en masse brugere, hvis det nu
> tager længere end 30 sekunder som er default limit et script an køre og jeg
> ikke har mulighed for at benytte set_time_limit() da php køre i safe mode
> hvad gør man så?
>
> Hvad er den normale fremgangs måde mht. til at sende mange mails?
> Selvom jeg havde mulighed for at ændre på de 30 sek. eller benytte
> set_time_limit() så syntes jeg ikke det er smart at brugeren ikke kan se at
> der sker noget i de f.eks. 2 minuter det tager at sende alle mails.

Jeg plejer at lave det når man trykker på "send mails" så popper der et
vindue op, med noget tekst ala
xxx mails sendt ud af yyy
og den vil så hele tiden blive talt op.
For at undgå at det hele vil timeout så sender jeg altid kun 1-2 mails
adgangen, også bruger jeg AJAX til at sende mailsne og skrive teksten.

Harald (06-04-2007)
Kommentar
Fra : Harald


Dato : 06-04-07 11:01

"Martin" <news@natten-i.dk> skrev i en meddelelse
news:46160c6c$0$90264$14726298@news.sunsite.dk...
> Harald wrote:
>> Hej
>>
>> Jeg skal lave et script der sender en mail til en masse brugere, hvis det
>> nu tager længere end 30 sekunder som er default limit et script an køre
>> og jeg ikke har mulighed for at benytte set_time_limit() da php køre i
>> safe mode hvad gør man så?
>>
>> Hvad er den normale fremgangs måde mht. til at sende mange mails?
>> Selvom jeg havde mulighed for at ændre på de 30 sek. eller benytte
>> set_time_limit() så syntes jeg ikke det er smart at brugeren ikke kan se
>> at der sker noget i de f.eks. 2 minuter det tager at sende alle mails.
>
> Jeg plejer at lave det når man trykker på "send mails" så popper der et
> vindue op, med noget tekst ala
> xxx mails sendt ud af yyy
> og den vil så hele tiden blive talt op.
> For at undgå at det hele vil timeout så sender jeg altid kun 1-2 mails
> adgangen, også bruger jeg AJAX til at sende mailsne og skrive teksten.

Kan du kort forklare fremgangsmåden.
Jeg kan kalde en php side og få den til at sende de 2 første mails i
databasen og retunere en tekst "Sendt 2 af 20", men hvordan kommer man så
videre, altså kalde php siden igen og få den til at sende de 2 næste mails?

/HK



Martin (06-04-2007)
Kommentar
Fra : Martin


Dato : 06-04-07 14:06

Harald wrote:
> Kan du kort forklare fremgangsmåden.
> Jeg kan kalde en php side og få den til at sende de 2 første mails i
> databasen og retunere en tekst "Sendt 2 af 20", men hvordan kommer man så
> videre, altså kalde php siden igen og få den til at sende de 2 næste mails?

Popup vinduet bliver åbnet med fx. en variabel kaldet antal (ialt antal
beskeder der skal sendes) denne variabel skal så bruges hele tiden.

Jeg ville så lave et httprequest med en string ala next=2&antal=20
så skal den side httprequest så finde de næste 2 i databasen/eller hvad
du bruger også sende dem.

Så kan du inde i state funktionen switche på httprequest.state når den
er 4, så er php dokumentet færdigt, og med den kan du så kalde ajax
funktionen igen, men nu bare med +2 i next.

xmlHttp.onreadystatechange=function() {
switch(xmlHttp.readyState) {
case 0:
case 1:
case 2:
case 3:
// Sending messages
// Lav fx. et loading ikon eller lign.
break;
case 4:
// Når xmlHttp.readyState = 4, så er PHP scriptet færdigt
// og vi kan så kalde ajax funktionen igen
// noget ala
sendMessage(next+2,antal);
break;
}
}

Harald (06-04-2007)
Kommentar
Fra : Harald


Dato : 06-04-07 14:35

"Martin" <news@natten-i.dk> skrev i en meddelelse
news:461644cb$0$90263$14726298@news.sunsite.dk...
> Harald wrote:
>> Kan du kort forklare fremgangsmåden.
>> Jeg kan kalde en php side og få den til at sende de 2 første mails i
>> databasen og retunere en tekst "Sendt 2 af 20", men hvordan kommer man så
>> videre, altså kalde php siden igen og få den til at sende de 2 næste
>> mails?
>
> Popup vinduet bliver åbnet med fx. en variabel kaldet antal (ialt antal
> beskeder der skal sendes) denne variabel skal så bruges hele tiden.
>
> Jeg ville så lave et httprequest med en string ala next=2&antal=20
> så skal den side httprequest så finde de næste 2 i databasen/eller hvad du
> bruger også sende dem.
>
> Så kan du inde i state funktionen switche på httprequest.state når den er
> 4, så er php dokumentet færdigt, og med den kan du så kalde ajax
> funktionen igen, men nu bare med +2 i next.
>
> xmlHttp.onreadystatechange=function() {
> switch(xmlHttp.readyState) {
> case 0:
> case 1:
> case 2:
> case 3:
> // Sending messages
> // Lav fx. et loading ikon eller lign.
> break;
> case 4:
> // Når xmlHttp.readyState = 4, så er PHP scriptet færdigt
> // og vi kan så kalde ajax funktionen igen
> // noget ala
> sendMessage(next+2,antal);
> break;
> }
> }

Jeg har lavet denne lille test, som ser ud til at virke. Den tæller op
indtil time.php retunere -1. Så er det jo bare at skrive lidt mail kode i
time.php´en så burde det jo køre.

<html>
<body>

<script type="text/javascript">
function ajaxFunction(i)
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
i=xmlHttp.responseText;
document.getElementById("txtHint").innerHTML=i;
if (i>-1) {
ajaxFunction(i);
}
}
}
xmlHttp.open("GET","time.php?i="+i,true);
xmlHttp.send(null);
}
</script>

<a href="#" onClick="javascript:ajaxFunction(1);">Send mails</a>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>

------ og time.php´en

<?php
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); // disable IE caching
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );
$i=1;
if (isset($_GET['i'])) {
$i=$_GET['i'];
}
$i=$i+1;
if ($i>100) $i=-1;
echo $i;
?>



Harald (06-04-2007)
Kommentar
Fra : Harald


Dato : 06-04-07 11:03

"Martin" <news@natten-i.dk> skrev i en meddelelse
news:46160c6c$0$90264$14726298@news.sunsite.dk...
> Harald wrote:
>> Hej
>>
>> Jeg skal lave et script der sender en mail til en masse brugere, hvis det
>> nu tager længere end 30 sekunder som er default limit et script an køre
>> og jeg ikke har mulighed for at benytte set_time_limit() da php køre i
>> safe mode hvad gør man så?
>>
>> Hvad er den normale fremgangs måde mht. til at sende mange mails?
>> Selvom jeg havde mulighed for at ændre på de 30 sek. eller benytte
>> set_time_limit() så syntes jeg ikke det er smart at brugeren ikke kan se
>> at der sker noget i de f.eks. 2 minuter det tager at sende alle mails.
>
> Jeg plejer at lave det når man trykker på "send mails" så popper der et
> vindue op, med noget tekst ala
> xxx mails sendt ud af yyy
> og den vil så hele tiden blive talt op.
> For at undgå at det hele vil timeout så sender jeg altid kun 1-2 mails
> adgangen, også bruger jeg AJAX til at sende mailsne og skrive teksten.

Jeg har læst dette:
http://www.w3schools.com/ajax/ajax_intro.asp

og det ser jo rimelig enkelt ud.

/HK



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste