white screen of death na mail-script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steven Huynen

Steven Huynen

13/01/2015 11:32:28
Quote Anchor link
Ik heb een eenvoudig formulier dat dient om mails te sturen naar emailadressen die staan opgeslagen in een database.
Het formulier laat toe om een selectie te maken van groepen. Bijvoorbeeld het eerste leerjaar, het tweede leerjaar,... Na het verzenden komt er een tabel op het scherm met de emailadressen en namen van personen naar wie de mails zijn verstuurd.

Het loopt echter een beetje fout als ik iedereen selecteer. Een groep bestaat uit maximum 30 e-mailadressen. 'Iedereen' selecteren is echter een 500-tal e-mails dat worden verstuurd. Na het verzenden, moet ik even wachten (mails worden dan verstuurd), maar daarna kom ik niet op de pagina waar de tabel met namen en adressen staat, maar krijg ik een white screen of death. Er worden echter wel mails verstuurd, maar ik weet niet ofdat iedereen de mail wel heeft aangekregen.


Hieronder een stuk van mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if($naar=="Alle leden"){
            $leden=mysql_query("SELECT Naam, Voornaam, Email FROM Leden WHERE ($seizoen='Ja' || $seizoen='Neen')");
            while($lid=mysql_fetch_array($leden)){
                $naam=$lid['Naam'];
                $voornaam=$lid['Voornaam'];
                $email=$lid['Email'];
                if(mail($email, $onderwerp, $msg, $headers)==true){
                   $succes=true;
                }

                else{
                   $succes=false;
                }

                $maillist[]=array("$naam","$voornaam","$email","$succes");
            }
        }

?>



Deze code werkt perfect met een klein aantal e-mail adressen. Ik vermoed dat de mail-functie in php het probleem veroorzaakt, omdat die bij elke mail zijn protocols opent en sluit. Hierdoor duurt het tamelijk lang voordat de browser verder kan en er waarschijnlijk een time-out error wordt gecreeerd. Maar hiervan heb ik geen kennis.

Kan iemand mij hierbij helpen?

Alvast bedankt

Steven
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 13/01/2015 11:36:20 door - Ariën -
 
PHP hulp

PHP hulp

26/11/2024 08:57:09
 
- Ariën  -
Beheerder

- Ariën -

13/01/2015 11:34:48
Quote Anchor link
Waar kom $naar vandaan?

Verder is het geen 'white screen of death' omdat het script geen fatale fout uit zijn eigen maakt. Dus ik noem het gewoon een 'blank screen'
Gewijzigd op 13/01/2015 11:35:57 door - Ariën -
 
- SanThe -

- SanThe -

13/01/2015 11:35:08
Quote Anchor link
Zet dit bovenin je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
 
Steven Huynen

Steven Huynen

13/01/2015 11:38:50
Quote Anchor link
Die $naar komt van een $_POST, hierin staat naar welke groep (of alle leden) er een mail moet worden gestuurd.


Ik kan dat wel in mijn script zetten, maar het probleem is dat ik het formulier niet kan testen zonder 500 mensen lastig te vallen. Dus dat is niet echt een oplossing.
 
- SanThe -

- SanThe -

13/01/2015 11:42:15
Quote Anchor link
Comment regel 8 t/m 13 eens uit.
Werkt het dan wel?
Zo ja, dan vermoed ik dat php een timeout krijgt.
 
- Ariën  -
Beheerder

- Ariën -

13/01/2015 11:43:35
Quote Anchor link
Of een debug-switch inbouwen en al die mails in dat geval naar een eigen aangemaakte mailbox sturen?
Ik raad aan om na elke 10 mails even een wachtpauze van enkele seconden in te bouwen. Of beter zelfs, gebruik te maken van PHPmailer en dan per 20 mails over een enkele mail met BCC verdelen.

Dan hoef je er maar 25 mails voor uit te schieten.

Let er wel op dat PHP een max_execution kent.
Wat geeft dit aan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo ini_get('max_execution_time');
?>
Gewijzigd op 13/01/2015 11:45:26 door - Ariën -
 
Steven Huynen

Steven Huynen

13/01/2015 11:46:32
Quote Anchor link
Ja, dan werkt het direct. Ik krijg de volledige lijst met namen.

Hoe kan ik de php time-out oplossen?
 
- Ariën  -
Beheerder

- Ariën -

13/01/2015 11:49:35
Quote Anchor link
Op hoeveel staat deze nu, volgens mijn script?

Je kan hem verlengen door dit bovenaan te plaatsen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php ini_set('max_execution_time', 300);
// 300 sec = 5 min.
?>


Persoonlijk raad ik wel aan om per mailadres bij te houden of de mail al verstuurd is. Als je script nu onderbroken wordt, dan weet je nu niet meer wie een mail gehad heeft, en moet je sommige mensen teisteren met dubbele mails.
Gewijzigd op 13/01/2015 11:50:07 door - Ariën -
 
Steven Huynen

Steven Huynen

13/01/2015 11:56:25
Quote Anchor link
Standaard stond hij blijkbaar op 50. Nu op 300.

Probleem is dat ik het echt niet kan testen, of ik moest een groep aanmaken met allemaal valse e-mailadressen.


Ik hoop dat het hiermee opgelost is. Zal het laten weten als ik het nog eens nodig heb gehad.

1000 keren bedankt in ieder geval
 
- Ariën  -
Beheerder

- Ariën -

13/01/2015 12:00:33
Quote Anchor link
Test anders eens met alleen een sleep(320), die dus langer is dan de executiontime.
Dan zal je ook kunnen uitzoeken of de executiontime echt werkt ;-)
Gewijzigd op 13/01/2015 12:01:08 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.