michel gelin: Optimierung Newsletterscript

Hallo zusammen,

ich habe mir vor einiger Zeit mal ein ziemlich primitives Script zum versenden von Newsletter heruntergeladen, dieses habe ich erweitert und angepasst (bin keine experte, aber ich denke dafür reichts knapp;-).

Nun stelle ich mir die Frage ob das eigentliche Senden so optimal gelöst ist:

PHP Version 4.3.0 / i386-redhat-linux-gnu

[...]
/* Name des Mailing-List-Files welches e-mail-adressen enthält */
$filelist = "mailfile.txt";

function sendNews($subject, $message) {
         $filecontents = file($GLOBALS["filelist"]);
         for ($i=0;$i<sizeof($filecontents);$i++) {
             $a = mail($filecontents[$i], $subject, stripslashes($message), $GLOBALS["emailheaders"]);
    $mailnr = $i + 1;
    if (!$a){
       echo "<br>Kann Mail nicht versenden";
                break;}
    else {
      echo "<br>Sende Mail Nr.".$mailnr." von ".sizeof($filecontents)."\n";
      }

}
[...]

Mit ca. 50 Mailadressen klappt das ganze momentan problemlos, aber was passiert wenn es mehr werden -> bekomme ich da Probleme mit der Ausführzeit (max_execution_time) des Skriptes (-> ist vom ISP auf Standard 30s gesetzt)?

Habe ich das mit den Globalen Variablen richtig verstanden($GLOBALS["filelist"]) oder "macht man das" nicht so?

Ich weiss, dass die "Sende Mail Nr."-Ausgabe erst sichtbar wird wenn alle Mails versendet sind, hierfür müsste man wohl eine JS-Lösung einsetzten um jedes einzeln zu quitieren (Statusanzeige).

Ich wäre Euch für Eure Inputs dankbar!

Gruss,
Michel Gelin

  1. Guten Morgen,

    ich habe mir vor einiger Zeit mal ein ziemlich primitives Script zum versenden von Newsletter heruntergeladen, dieses habe ich erweitert und angepasst (bin keine experte, aber ich denke dafür reichts knapp;-).

    Nun stelle ich mir die Frage ob das eigentliche Senden so optimal gelöst ist:
    [...]
    /* Name des Mailing-List-Files welches e-mail-adressen enthält */
    $filelist = "mailfile.txt";

    function sendNews($subject, $message) {
             $filecontents = file($GLOBALS["filelist"]);
             for ($i=0;$i<sizeof($filecontents);$i++) {
                 $a = mail($filecontents[$i], $subject, stripslashes($message), $GLOBALS["emailheaders"]);
        $mailnr = $i + 1;
        if (!$a){
           echo "<br>Kann Mail nicht versenden";
                    break;}
        else {
          echo "<br>Sende Mail Nr.".$mailnr." von ".sizeof($filecontents)."\n";
          }

    }
    [...]

    Wie kannst du bei der Klammerung den Überblick haben? Furchtbar.

    Für $mailnr = $i + 1;

    kannst du auch

    $mailnr++;

    schreiben.

    Mit ca. 50 Mailadressen klappt das ganze momentan problemlos, aber was passiert wenn es mehr werden -> bekomme ich da Probleme mit der Ausführzeit (max_execution_time) des Skriptes (-> ist vom ISP auf Standard 30s gesetzt)?

    Mache dich mit den Methoden, die zu umgehen, vertraut.

    Habe ich das mit den Globalen Variablen richtig verstanden($GLOBALS["filelist"]) oder "macht man das" nicht so?

    Nein, genau so macht man es eigentlich nicht. Dazu steht in der Doku aber genug, denke ich.

    Ich weiss, dass die "Sende Mail Nr."-Ausgabe erst sichtbar wird wenn alle Mails versendet sind, hierfür müsste man wohl eine JS-Lösung einsetzten um jedes einzeln zu quitieren (Statusanzeige).

    Du kennst flush()?

    Ich wäre Euch für Eure Inputs dankbar!

    Hier hast du einen schönen von mir: <input name="input" value="fass mich nicht an!" disabled="disabled" style="schön:extraschön;"> *fg*

    Grüße aus Barsinghausen,
    Fabian

    1. Hallo Fabian,

      Danke erstmal für Deine Kommentare!

      Wie kannst du bei der Klammerung den Überblick haben? Furchtbar.

      Für $mailnr = $i + 1;
      kannst du auch
      $mailnr++;
      schreiben.

      Werde ich machen!

      Mache dich mit den Methoden, die zu umgehen, vertraut.

      Ist set_time_limit() das was Du damit meinst?

      Habe ich das mit den Globalen Variablen richtig verstanden($GLOBALS["filelist"]) oder "macht man das" nicht so?

      Nein, genau so macht man es eigentlich nicht. Dazu steht in der Doku aber genug, denke ich.

      werde mich noch schlau machen....

      Du kennst flush()?

      Bis anhin noch nicht verwendet, werde ich wohl ändern..!

      Gruss,

      Michel Gelin

      1. Hallo,

        Mache dich mit den Methoden, die zu umgehen, vertraut.
        Ist set_time_limit() das was Du damit meinst?

        Ja. Eine weitere ist, speicherentlastendes Coden. Bei 10 Zeilen mit Schleife sieht das auf den ersten Blick nicht so wichtig aus, aber man sollte mal wirklich mit microtime() dabei gehen und schauen, was wie lange dauert...

        Habe ich das mit den Globalen Variablen richtig verstanden($GLOBALS["filelist"]) oder "macht man das" nicht so?
        Nein, genau so macht man es eigentlich nicht. Dazu steht in der Doku aber genug, denke ich.
        werde mich noch schlau machen....

        Das ist gut.

        Du kennst flush()?
        Bis anhin noch nicht verwendet, werde ich wohl ändern..!

        Dies ist einmal eine sinnvolle Anwendungsmöglichkeit.

        Grüße aus Barsinghausen,
        Fabian