RETR wartet 30 Sekunden!

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

  • RETR wartet 30 Sekunden!

    folgendes:
    ich habe ein Problem,
    zwar Zeit es die eMail an,
    nur aber erst nach 30 Sekunden und dann noch mit einem TimeOut.

    Ich habe schon etliche Suchmaschienen durchforstet aber nichts gefunden.
    Hier mal der Quellcode der Datei:

    PHP-Code:
    <?

    $fp = fsockopen("$Server", 110);
    if($fp)
    {
      echo fgets($fp, 1024) . "<br>\n";

      fputs($fp, "USER $user\r\n");
      echo fgets($fp, 1024) . "<br>\n";
      fputs($fp, "PASS $pass\r\n");
      echo fgets($fp, 1024) . "<br>\n";
      fputs($fp, "STAT\r\n");
      echo fgets($fp, 1024) . "<br>\n ";

      fputs($fp, "RETR $see\r\n");
    while($line=fgets($fp, 1024))      {
    echo $line . "<br>";
    }



      fputs($fp, "DELE $del\r\n");
      echo fgets($fp, 1024) . "<br>\n ";
      fputs($fp, "QUIT\r\n");
      echo fgets($fp, 1024) . "<br>\n <br>\n";



      fclose($fp);
      }




    ?>
    Ich bitte bite und bite euch nochmals:
    Helft miirrrr......
    BBIITTTEEEE!!!


    Das hier wird übrigens im Bowser ausegeben:

    +OK WEB.DE POP3-Server
    +OK Bitte Kennwort eingeben/enter password
    +OK Postfach bereit/mailbox locked and ready
    +OK 1 654
    +OK Nachricht folgt/message follows
    Received: from [213.193.0.118] (helo=wmphpf04.lyceu.net)
    by mx10.web.de with esmtp (WEB.DE(Exim) 4.44 #50)
    id 16yqXV-00033P-00
    for stefanrosenwald@web.de; Sat, 20 Apr 2002 10:48:13 +0200
    Received: by wmphpf04.lyceu.net (Postfix, from userid 870743)
    id 579621A1C; Sat, 20 Apr 2002 10:48:12 +0200 (CEST)
    To: stefanrosenwald@web.de
    Subject: hi du
    From: StefanRosenwald@web.de
    X-MM-Mail-From-Script: /stefanrosenwald//mail/mail.php
    X-Complains-To: abuse@lycos.de
    X-MM-Mail-From-IP: 80.138.40.207
    Errors-To: stefanrosenwald@lycos.de
    Message-Id: <20020420084812.579621A1C@wmphpf04.lyceu.net>
    Date: Sat, 20 Apr 2002 10:48:12 +0200 (CEST)

    na,
    wie gehts???
    .

    Fatal error: Maximum execution time of 30 seconds exceeded in c:\apache\htdocs\mail\pop3\web2.php on line 16




    Aber eben nur erst nach dem timeout von 30 sekunden.

  • #2
    vielleicht werden nach der Mail noch nicht-darstellbare Zeichen vom ftp gesendet?
    gibt mal rawurlencode($line) aus ...
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      sorry aber...

      sorry, aber
      könntest du mir das etwas genauer erklären
      z.B. wo ich des rawurlencode($line)
      in meine Datei einfügen soll?

      bin nähmlich noch relativ n anfänger in php
      und will des bin heut abend noch schaffen.

      Kommentar


      • #4
        aber immer doch

        genau da:

        while($line=fgets($fp, 1024)) {
        echo rawurlencode($line) . "<br>";
        }
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          danke, aber

          danke für deine schnelle antwort,
          aber leider *heul* gehts immer noch net:

          was ich nur komisch finde:
          wenn ich

          fputs($fp, "RETR $see\r\n");
          echo fgets($fp, 1024) . "<br>\n";

          schreibe,
          wird die erste Zeile der Mail angezeigt,
          wenn ich das z.b. 10 mal untereinander schreibe,
          werden die ersten 10 Zeilen angezeigt,
          ohne dass es zu einem timeout kommt,
          komisch, oder?
          nun könnte ich es ja so machen,
          aber wenn die eine eMail 50 Zeilen hat und die andere 100
          und ich schreibe das 100mal untereinander, wird die Nachricht
          mit den 50 Zeilen 2 mal angezeigt.

          hättest du noch ne ahnung???

          Kommentar


          • #6
            ahaaaaaaaaaa

            1) alle Zeilen einlesen und merken bis ereg('^Message-Id: ', $line) wahr ist - also bis zur Zeile mit der Message-ID
            2) ist diese Message-ID schon gespeichert?
            ja: Zeilen ausgeben (den Header aber nur einmal), Ende der Schleife
            nein:
            3) Message-ID speichern
            4) -> 1)
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              hää

              oh mein gott,
              ich glaub ich bin einfach zu doof für sowas.
              also:

              ich möchte einfach nur meine nachricht anzeigen lassen
              und das nur ein mal.

              nagut, wenn das nicht geht,
              kann man dann wenigstens so machen,
              dass es den header nicht anzeigt, sondern nur die nachricht???

              Kommentar


              • #8
                a

                hast dus vielleicht so gemeint:

                fputs($fp, "RETR $see\r\n");
                while($line=fgets($fp, 1024)) {
                echo ereg('^Message-Id: ', $line) . "<br>";

                ????

                da kommt immernoch timeout

                Kommentar


                • #9
                  nö ... in etwa so:

                  zu Anfang kommen ja diese Zeilen:
                  Received: from [213.193.0.118] (helo=wmphpf04.lyceu.net)
                  by mx10.web.de with esmtp (WEB.DE(Exim) 4.44 #50)
                  id 16yqXV-00033P-00
                  for stefanrosenwald@web.de; Sat, 20 Apr 2002 10:48:13 +0200
                  Received: by wmphpf04.lyceu.net (Postfix, from userid 870743)
                  und dann irgendwo diese:
                  Message-Id: <20020420084812.579621A1C@wmphpf04.lyceu.net>
                  Die Message-Id ist eindeutig für jede Mail; wenn diese Zeile zum zweiten Mal kommt, kann die Schleife also abgebrochen werden.

                  Jetzt das ganze mal in PHP übersetzt:
                  PHP-Code:
                  $zeilen = array();
                  while(
                  $line=fgets($fp1024))      {
                    
                  // wenn message-id: gucken ob die Zeile schon mal da war
                    
                  if (ereg('^Message-Id'$line) && in_array($line$zeilen))
                    { 
                  // jau, wir sind schon in der Wiederholung
                      // braucht PHP 4.0.5: Wo ist die Zeile?
                      
                  $n array_search ($line$zeilen);
                      
                  // zurückgehen, bis keine Zeilen wiederholt werden
                      
                  for ($i=count($zeilen)-1; !strcmp($zeilen[$i], $zeilen[$n]); $i--, $n--);
                      
                  // jetzt steht in $n der Index der letzten nicht-wiederholten Zeile
                      // Zeilen bis dahin ausgeben:
                      
                  for ($i=0$i<=$n$i++)
                        echo 
                  $zeilen[$i]. "<br>\n";
                      
                  // und die Schleife beenden
                      
                  break;
                    }
                    
                  // noch keine Wiederholung der Message-Id, weiter geht´s
                    
                  $zeilen[] = $line;

                  immer vorausgesetzt, ich habe den Teil hier richtig verstanden:
                  aber wenn die eine eMail 50 Zeilen hat und die andere 100 und ich schreibe das 100mal untereinander, wird die Nachricht mit den 50 Zeilen 2 mal angezeigt.
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar


                  • #10
                    ok aber

                    ok danke,
                    das funktioniert auch,
                    WENNNNNN
                    es jetzt nicht wieder 30 sekunden dauern würde und dann ein timeout kommen würde.
                    man...
                    ich glaub irgendwas stimmt nicht.
                    kann man denn nicht irgendwie das script nach 5 sekunden abbrechen lassen und dass dan die ergebnisse angezeigt werden???


                    naja, vielleicht schaffen wirs ja noch.

                    Kommentar


                    • #11
                      argl ... klaro!
                      fgets($fp, 1024) liest ja auch nicht eine Zeile sondern 1024 Zeichen ...
                      ändern wir´s so:
                      PHP-Code:
                      function readline ($fp)
                      {
                        static 
                      $buffer '';
                        while (
                      $p strpos("\n"$buffer))===false)
                          
                      $buffer .= fgets($fp1024);
                        
                      // Zeile = alles bis zum ersten \n
                        
                      $zeile rtrim(substr($buffer0$p));
                        
                      // alles dahinter merken bis zum nächsten Aufruf
                        
                      $buffer ltrim(substr($buffer1+$p));
                        return 
                      $zeile;

                      und das andere fgets($fp, 1024) durch readline($fp) ersetzen

                      Das "static" sorgt dafür, dass der Inhalt beim Verlassen der Funktion erhalten bleibt bis zum nächsten Aufruf; auf keinen Fall weglassen!

                      Wenn´s jetzt immer noch nicht klappt, dann verringer mal den Wert 1024 in der Funktion ... spätestens bei '1' sollte es funktionieren.
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar

                      Lädt...
                      X