MySQL - PHP While-Schleife timeout

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL - PHP While-Schleife timeout

    Hallo,

    ich bin php - mysql Newbi und praktiziere "learning by doing".

    OK, die Erfahrenen unter Euch stöhnen über solche Amateure, zumal wenn Sie für Serverabstürze oder ähnlichen Erscheinungen verantwortlich sind.

    Trotzdem meine Frage:

    Ich habe ein einfaches Newslettersystem gebastelt auf PHP und MySQL-Basis gebastelt. Hierfür habe ich eine while Schleife eingebaut, die dann ca. 3000 mal durhclaufen wird (Anzahl der Empfänger).

    Ich habe nur bedenken, dass mir der Server ein Time Out präsentiert. Reicht es da wirklich, einfach eine Spleep Funktion einzubauen, um dies zu verhindern?

    Hier mein Code:


    PHP-Code:
    <?

    ...
    $ii="";

        $result=mysql_query("SELECT Email,Vorname,Name FROM $xy where news='1'",$xyz);
        while($row = mysql_fetch_array($result)) {
            $email=$row["Email"];
            $Vorname=$row["Vorname"];
            $Name=$row["Name"];
            $Anrede="Hallo $Vorname $Name\n\n";
            
    mail("$email","$betreff","$Kopf $Anrede $Newstext $Schluss","$eheader");

            $ii++;
            IF ($ii == 50){
            sleep(10);
            $ii ="";
            }
     ... ?>
    Irgendwann meinte ich mal zu hören, dass die DAten gepuffert werden sollten? Was versteht man denn darunter eigentlich?


    Ich danke Euch für Eure Bemühungen.

    Gruß, Flo(h)

    EDIT:
    php.tags by Abraxax
    Zuletzt geändert von Abraxax; 14.08.2003, 10:48.

  • #2
    ein sleep bringt wohl nicht wirklich was. denn dein script darf maximal eh nur 30sec im standardfall laufen.

    mache es am besten so....
    1. arbeite mit LIMIT x,100 in der db
    2. mache einen meta.refresh auf dein script nach der abarbeitung von 100 emails mit den neuen paramter für x (startwert)
    3. dann beginnt es von vorn, jedoch mit den nächsten adressen.


    das wäre meine idee zu den massenmails..
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      bei mir läuft ein Newsletter, der solch einen Selekt hat mit über 120.000 Usern im Resultset und das ohne Probleme mit dem Server an sich.
      Da das Skript aber nur mit dem Resultset in der While-Schleife arbeitet, ist das doch auch gar kein Problem. Problem wird vielleicht eher der Mailserver, der den Krempel abarbeiten muss und das Skript ausbremst.
      Dafür kann ein Sleep schon okay sein.

      Zum Puffern: du kannst doch zuerst mal den kompletten Resultset der MySQL lokal in ein Array auslesen und dann später in einer separaten While-Schleife mit mail() verknüpfen -> dadurch kann MySQL die Resourcen freigeben (wenn du die Verbindung vorher schliesst).

      Kommentar


      • #4
        Hallo Abraxax, hallo BrainBug,

        vielen Dank EUch beiden für die schnelle Antwort.

        Ehrlich gesagt bin ich jetzt so schlau wie vorher:

        Abraxax, Du meinst, das Script läuft so nicht störungsfrei und schmiert nach 30 Sec automatisch ab...
        Versteh ich richtig, dass also das Parsen eines PHP Scriptes (nennt man das so?) maximal 30 Sekunden dauern darf?

        BrainBug, Du meinst, das Script läuft so, aber eventuell macht der Mailserver Probleme...

        Wenn der Mailserver wirklich Probleme machen sollte, dann wäre Doch auch der vorgeschlagene refresh von Abraxax wirkungslos, oder?

        Gibt der Mailserver irgendein "true" zurück, wenn er den Befehl mail() erfolgreich umgesetzt hat? Könnte man dies nicht überprüfen?

        Bringt mir den eine Pufferung Stabilität in diese Angelegenheit?

        Danke again,

        der nixweis- Flo(h)

        Kommentar


        • #5
          Original geschrieben von flo(h)
          Abraxax, Du meinst, das Script läuft so nicht störungsfrei und schmiert nach 30 Sec automatisch ab...
          Versteh ich richtig, dass also das Parsen eines PHP Scriptes (nennt man das so?) maximal 30 Sekunden dauern darf? [/B]
          die standard-einstellung ist 30 sec.

          das heisst aber nicht, dass du das nicht ändern kannst...

          aber im prinzip ist es so. wen die timeout erreicht wird, ist das script zu ende.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            du kannst den Timeout eines Skriptes mittels

            set_time_limit(3600);

            auf eine Stunde setzen, vorausgesetzt die Änderung ist erlaubt.

            mail() von PHP setzt lediglich eine Mail an den SMTP-Server ab und wartet, ob dieser das entgegen nimmt. Das kann sich ein wenig verzögern, wenn dieser viel zu tun hat und haufenweise Mails in der Queue warten. Der eigentlich Versand wird aber nicht an PHP gemeldet. Glaube ich wenigstens zumindest sind bei mir dann noch haufenweise Mails in der Queue, wenn das PHP-Skript schon fertig ist.

            Kommentar

            Lädt...
            X