/ 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
Pear or not
Fra : tdc


Dato : 18-08-07 22:25

Hej

Jeg står med et skaleringsproblem, tror jeg nok...

Jeg har lavet et lille program, der sender e-mails til en eller flere
grupper modtagere. Jeg anvender mail() til formålet. Problemet opstår når
antallet af modtagere overstiger ca. 70 (tror jeg nok!). I dokumentationen
til mail() står, at funktionen ikke er egnet til større forsendelser. Men
hvad gør jeg så?

Jeg er gået videre til Pear-pakken, men ved ikke om det er en mulig løsning.
Hvordan går jeg i gang. Jeg har en ganske almindelig webhotel hos
surftown.dk. Pear-gruppen stiller en række funktioner til rådighed, men dem
kan jo ikke sådan uden videre anvende?!

På forhånd tak


 
 
Martin (19-08-2007)
Kommentar
Fra : Martin


Dato : 19-08-07 00:23

tdc wrote:
> Hej
>
> Jeg står med et skaleringsproblem, tror jeg nok...
>
> Jeg har lavet et lille program, der sender e-mails til en eller flere
> grupper modtagere. Jeg anvender mail() til formålet. Problemet opstår
> når antallet af modtagere overstiger ca. 70 (tror jeg nok!). I
> dokumentationen til mail() står, at funktionen ikke er egnet til større
> forsendelser. Men hvad gør jeg så?

Det kan laves med en AJAX baseret løsning.


>
> Jeg er gået videre til Pear-pakken, men ved ikke om det er en mulig
> løsning. Hvordan går jeg i gang. Jeg har en ganske almindelig webhotel
> hos surftown.dk. Pear-gruppen stiller en række funktioner til rådighed,
> men dem kan jo ikke sådan uden videre anvende?!

Sagtens, bare husk at rette stien i alle filer, der er skam ikke noget
specielt i dette, ikke andet end at stierne skal rettes.

>
> På forhånd tak

tdc (19-08-2007)
Kommentar
Fra : tdc


Dato : 19-08-07 09:28

> Det kan laves med en AJAX baseret løsning.

Jeg har nogenlunde styr på at anvende AJAX, men hvordan er det en løsning?
Bare ved at lade scriptet fortsætte til status er 'ready'? eller ved at lade
et AJAX-script køre i løkke?

>> Jeg er gået videre til Pear-pakken, men ved ikke om det er en mulig
>> løsning. Hvordan går jeg i gang. Jeg har en ganske almindelig webhotel
>> hos surftown.dk. Pear-gruppen stiller en række funktioner til rådighed,
>> men dem kan jo ikke sådan uden videre anvende?!
>
> Sagtens, bare husk at rette stien i alle filer, der er skam ikke noget
> specielt i dette, ikke andet end at stierne skal rettes.


"Rette stien" hvordan? Jeg er vant til bare at bruge løs af php-funktioner
ved at referere til dem. Hvis jeg referer til en PEAR-funktion f.eks.
factory(); får jeg en error "Call to undefined function: factory()"??

Torben


tdc (19-08-2007)
Kommentar
Fra : tdc


Dato : 19-08-07 11:30

> "Rette stien" hvordan? Jeg er vant til bare at bruge løs af php-funktioner
> ved at referere til dem. Hvis jeg referer til en PEAR-funktion f.eks.
> factory(); får jeg en error "Call to undefined function: factory()"??

Hm... jeg har i mellemtiden fundet ud af en del. Jeg kan forstå så meget, at
PEAR-pakken plus de pakker jeg konkret skal bruge skal installeres på
serveren og at pakkeren egentligt bare en lang række classes, funktioner
etc. som jeg derefter kan anvende. Men af dokumentationen fremgår at jeg
enten skal have adgang til at køre en installation på serveren (og det har
jeg vel ikke?) eller at jeg skal benytte go-pear.php. Der står

For users who cannot perform the above steps, or who wish to obtain the
latest PEAR with a slightly higher risk of failure, use go-pear. go-pear
is obtained by downloading http://go-pear.org and saving it as go-pear.php.
After downloading, simply run "php go-pear.php" or open it in a web browser
(windows only) to download and install PEAR.

Torben


Martin (19-08-2007)
Kommentar
Fra : Martin


Dato : 19-08-07 14:23

tdc wrote:
>> "Rette stien" hvordan? Jeg er vant til bare at bruge løs af
>> php-funktioner ved at referere til dem. Hvis jeg referer til en
>> PEAR-funktion f.eks. factory(); får jeg en error "Call to undefined
>> function: factory()"??

Prøv at downloade PEAR tgz filen
http://download.pear.php.net/package/PEAR-1.6.1.tgz

Lav en mappe ved siden af dine alm. filer
fx
pear

Så du altså har

/index.php
/pear/

Udpak den downloadede fil kopier hele mappen PEAR-1.6.1 over i din pear
mappe.
Så ser dit bibliotekstræ således ud

/index.php
/pear/PEAR-1.6.1/OS
/pear/PEAR-1.6.1/PEAR
/pear/PEAR-1.6.1/scripts
osv osv osv

Download nu den pakke du vil bruge... (i dette tilfælde nupper vi
http://pear.php.net/package/HTML_QuickForm2 PS.. Kun til PHP5, ved PHP4
skal bruges http://pear.php.net/package/HTML_QuickForm

Download nu pakken
Unzip filen Kopier mappen HTML_Quickform-xx over i din /pear/PEAR-1.6.1
mappe

Nu kan du så for at bruge HTML_Quickform skrive

require('/pear/PEAR-1.6.1/HTML_Quickform-xxx/Quickform.php');

Nu vil du så få nogle errors da stien til PEAR.php inde i Quickform.php
er forkert - Så åbner du Quickform.php og ændre de 2 requires oppe i
toppen til den rigtige mappe.

require_once 'PEAR.php'; ændres til
require_once '/pear/PEAR-1.6.1/PEAR.php';

Og vupti... så nu virker PEAR også på serveren.


>
> Hm... jeg har i mellemtiden fundet ud af en del. Jeg kan forstå så
> meget, at PEAR-pakken plus de pakker jeg konkret skal bruge skal
> installeres på serveren og at pakkeren egentligt bare en lang række
> classes, funktioner etc. som jeg derefter kan anvende. Men af
> dokumentationen fremgår at jeg enten skal have adgang til at køre en
> installation på serveren (og det har jeg vel ikke?) eller at jeg skal
> benytte go-pear.php. Der står

Jeg har aldrig brugt denne metode, da jeg kun kører på linux servere,
hvor jeg ikke har root access.

Martin (19-08-2007)
Kommentar
Fra : Martin


Dato : 19-08-07 14:34

tdc wrote:
>> Det kan laves med en AJAX baseret løsning.
>
> Jeg har nogenlunde styr på at anvende AJAX, men hvordan er det en
> løsning? Bare ved at lade scriptet fortsætte til status er 'ready'?
> eller ved at lade et AJAX-script køre i løkke?

Du ved hvor mange der skal sendes mails til.

Så laver du en javascript funktion som kalder ajax og siger at 1-20 skal
have en mail.
Når de 20 mails er sendt så siger ajax så at 20-40 skal sendes - og
sådan kører løkken bare indtil alle mails er sendt.

Faktisk ret nemt. Kan laves med en enkelt javascript funktion.

function sendmail(number,max) {
// number = email adresse den skal starte ved
// max = antal emailadresser ialt
var Mailcount = 20;

new Ajax.Request('url_til_din_php_fil', {
method: 'get',
parameters: {start: number, end: Mailcount},
OnSuccess: function() {
number+=Mailcount;
if(number<max) sendmail(number,max);
}
}

Inde i din php fil er så et kald til en database eller lign.
SELECT emails FROM tabel LIMIT $_GET['start'],$_GET['end']
Også er det bare at lave en simpel mail() på resultaterne :)

Til javascriptet er bruge prototype framework http://prototypejs.org/api
da det lettere arbejdet en hel del.

Martin (19-08-2007)
Kommentar
Fra : Martin


Dato : 19-08-07 14:37

Martin wrote:
> function sendmail(number,max) {
> // number = email adresse den skal starte ved
> // max = antal emailadresser ialt
> var Mailcount = 20;
>
> new Ajax.Request('url_til_din_php_fil', {
> method: 'get',
> parameters: {start: number, end: Mailcount},
> OnSuccess: function() {
> number+=Mailcount;
> if(number<max) sendmail(number,max);
> }
> }
>
> Inde i din php fil er så et kald til en database eller lign.
> SELECT emails FROM tabel LIMIT $_GET['start'],$_GET['end']
> Også er det bare at lave en simpel mail() på resultaterne :)
>
> Til javascriptet er bruge prototype framework http://prototypejs.org/api
> da det lettere arbejdet en hel del.

Og for at kalde javascript funktionen bruges så

$max = SELECT COUNT(*) FROM tabel
sendmail(0,$max);

Jonas Delfs (21-08-2007)
Kommentar
Fra : Jonas Delfs


Dato : 21-08-07 16:15

Martin skrev:
> tdc wrote:
>> Jeg står med et skaleringsproblem, tror jeg nok...
>>
>> Jeg har lavet et lille program, der sender e-mails til en eller flere
>> grupper modtagere. Jeg anvender mail() til formålet. Problemet opstår
>> når antallet af modtagere overstiger ca. 70 (tror jeg nok!).
>> [snip]

>
> Det kan laves med en AJAX baseret løsning.

Ja, men der er da ikke rigtig (indtil videre i hvert fald) nogen grund
til at rode klienten ind i det?
Problemet er rigtig nok at der som regel opstår en flashehals når alle
mailsne forsøges sendt på en gang, men et simpelt sleep()-kald ind i
mellem skulle vel kunne gøre det (med mindre vi snakker _rigtig_ mange
mails).

Jonas

Martin (22-08-2007)
Kommentar
Fra : Martin


Dato : 22-08-07 23:23

Jonas Delfs wrote:
> Martin skrev:
>> tdc wrote:
>>> Jeg står med et skaleringsproblem, tror jeg nok...
>>>
>>> Jeg har lavet et lille program, der sender e-mails til en eller flere
>>> grupper modtagere. Jeg anvender mail() til formålet. Problemet opstår
>>> når antallet af modtagere overstiger ca. 70 (tror jeg nok!).
> >> [snip]
>
>>
>> Det kan laves med en AJAX baseret løsning.
>
> Ja, men der er da ikke rigtig (indtil videre i hvert fald) nogen grund
> til at rode klienten ind i det?
> Problemet er rigtig nok at der som regel opstår en flashehals når alle
> mailsne forsøges sendt på en gang, men et simpelt sleep()-kald ind i
> mellem skulle vel kunne gøre det (med mindre vi snakker _rigtig_ mange
> mails).

lad os sige vi har flere mailadresser, at det tager over 30 sek. at
sende dem (MAX_EXECUTION_TIME) og vi selvfølgelig ikke kan ændre i denne
via ini_set.

Hvordan skulle det ellers laves? :)

Kan ikke lige se hvor du vil hen med sleep() andet end at sørge for
SMTP'en ikk bliver overbelastet :)

Jonas Delfs (23-08-2007)
Kommentar
Fra : Jonas Delfs


Dato : 23-08-07 17:46

Martin skrev:
> Kan ikke lige se hvor du vil hen med sleep() andet end at sørge for
> SMTP'en ikk bliver overbelastet :)

Lige præcis. - mere er vel heller ikke nødvendigt som udgangspunkt.

Mvh. Jonas

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste