Ankündigung

Einklappen
Keine Ankündigung bisher.

feof Endlosschleife

Einklappen

Neue Werbung 2019

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

  • feof Endlosschleife

    Hallo,
    ich habe ein Problem, unzwar ich bekomme jedesmal die Fehlermeldung:

    Der Port deines Servers ist:
    Der Token ist:
    Der Port deines Servers ist:
    Der Token ist:
    Der Port deines Servers ist: 9991
    Der Token ist: P9hOLe+nvdl9lLWn570stNW5vdhYAcHKNc9
    Der Port deines Servers ist:
    Der Token ist:
    Fatal error: Maximum execution time of 30 seconds exceeded in C:\Inetpub\vhosts\****\httpdocs\fts3.php on line 19

    mit dem Code

    PHP-Code:
    <?php
    $fp 
    fsockopen("127.0.0.1"10011$errno$errstr10);

    if (!
    $fp) {
        echo 
    "$errstr ($errno)<br />\n";
    } else {
        
    $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
            
    fwrite($fp$out);
      while(!
    feof($fp)) {
        
    $kette fgets($fp,128);
        
    $kettef substr($kette744); 
        
    $kettefu substr($kette1935);
        echo 
    "<BR>Der Port deines Servers ist: $kettef\n<BR>Der Token ist: $kettefu\n";
    }
        
    fclose($fp);
    }
    Ich weiß das es an
    PHP-Code:
    while(!feof($fp)) 
    liegt aber wie bekomme ich es hin das er mir keine Endlosschleife macht.

    Ich habe auch wirklich schon überall gesucht und die Kommentare von z.B.:
    http://php.net/manual/de/function.feof.php auch wargenommen.

    Danke schonmal für die Antworten


  • #2
    Schau mal in das englischsprachige Handbuch!

    PHP: feof - Manual

    If the passed file pointer is not valid you may get an infinite loop, because feof() fails to return TRUE.
    http://hallophp.de

    Kommentar


    • #3
      Im deutschsprachigem Handbuch stehts auch drin Asipak.

      Gibt TRUE zurück, falls der Dateizeiger am Ende der Datei steht oder ein Fehler aufgetreten ist,
      @Malki

      Ich finde in den Kommentaren so einige Lösungsansätze... welche hast du ausprobiert?
      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

      Kommentar


      • #4
        Im deutschsprachigem Handbuch stehts auch drin Asipak.
        Nö, dort steht nicht, dass das der Grund für die Endlosschleife sein kann. Gut, man kann es sich denken, da man bei einem Fehler eher den Rückgabewert false erwarten würde, deswegen kann man das schon mal schnell überlesen.
        http://hallophp.de

        Kommentar


        • #5
          PHP-Code:
          <?php
          $fp 
          fsockopen("127.0.0.1"10011$errno$errstr10);

          if (!
          $fp) {
              echo 
          "$errstr ($errno)<br />\n";
          } else {
              
          $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                  
          fwrite($fp$out);

            while(
          feof($fp) == true) {
              
          $kette fgets($fp,128);
              
          $kettef substr($kette744); 
              
          $kettefu substr($kette1935);
              echo 
          "<BR>Der Port deines Servers ist: $kettef\n<BR>Der Token ist: $kettefu\n";
          }
              
          fclose($fp);
          }
          Also müsste der Code so aussehen.

          Damit habe ich keine Fehlermeldung, aber er Zeigt mir damit auch nichts im Browser an.

          Achso angefangen habe ich damit:
          PHP-Code:
          <?php
          $fp 
          fsockopen("www.example.com"80$errno$errstr30);
          if (!
          $fp) {
              echo 
          "$errstr ($errno)<br />\n";
          } else {
              
          $out "GET / HTTP/1.1\r\n";
              
          $out .= "Host: www.example.com\r\n";
              
          $out .= "Connection: Close\r\n\r\n";
              
          fwrite($fp$out);
              while (!
          feof($fp)) {
                  echo 
          fgets($fp128);
              }
              
          fclose($fp);
          }
          ?>
          nen beispiel aus fsockopen()

          Kommentar


          • #6
            If the passed file pointer is not valid you may get an infinite loop, because feof() fails to return TRUE.
            // if file can not be read or doesn't exist fopen function returns FALSE
            // FALSE from fopen will issue warning and result in infinite loop here
            Einfach mal lesen, was einem so gepostet wird. Links kann man nämlich auch anklicken.

            [edit] Und was sagst du zu
            Ich finde in den Kommentaren so einige Lösungsansätze... welche hast du ausprobiert?
            ?
            http://hallophp.de

            Kommentar


            • #7
              Die habe ich alle ausprobiert:
              PHP-Code:
              <?php
              $fp 
              fsockopen("127.0.0.1"10011$errno$errstr10);

              if (!
              $fp) {
                  echo 
              "$errstr ($errno)<br />\n";
              } else {
                  
              $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                      
              fwrite($fp$out);
              while(!
              feof($fp)) {
                
              $current_line fgets($fp);
                if (!
              feof($fp)) {
                  echo 
              $current_line;
                }
              }
                  
              fclose($fp);
              }
              ?>
              PHP-Code:
              <?php
              $fp 
              fsockopen("127.0.0.1"10011$errno$errstr10);

              if (!
              $fp) {
                  echo 
              "$errstr ($errno)<br />\n";
              } else {
                  
              $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                      
              fwrite($fp$out);

              while(!
              feof($fp)) {
                
              $c fgetc($fp);
              echo 
              $c;
                echo 
              ftell($fp), ",";
              }
              echo 
              'EOF!';

                  
              fclose($fp);
              }
              ?>
              PHP-Code:
              <?php
              $fp 
              fsockopen("127.0.0.1"10011$errno$errstr10);

              if (!
              $fp) {
                  echo 
              "$errstr ($errno)<br />\n";
              } else {
                  
              $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                      
              fwrite($fp$out);

              while(!
              feof($fp)) {
                
              $c fgetc($fp);
                if(
              $c === false) break;
              echo 
              $c;
              }
                  
              fclose($fp);
              }
              ?>
              PHP-Code:
              <?php
              $fp 
              fsockopen("127.0.0.1"10011$errno$errstr10);

              if (!
              $fp) {
                  echo 
              "$errstr ($errno)<br />\n";
              } else {
                  
              $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                      
              fwrite($fp$out);

                  
              $xml "";
                  if (
              $fp)
                  {
                     while (!
              feof($fp))
                     {
                         
              $xml .= fread($fp128);
                     }
                  echo 
              $xml;
                      
              fclose($fp);
                  } 
              }
              ?>
              PHP-Code:
              <?php
              $fp 
              fsockopen("127.0.0.1"10011$errno$errstr10);

              if (!
              $fp) {
                  echo 
              "$errstr ($errno)<br />\n";
              } else {
                  
              $out "login serveradmin PASSWORD\n servercreate virtualserver_name=DeinServe\n";
                      
              fwrite($fp$out);


              if (
              $fp) do {
                  
              $line fgets($fp);
              echo 
              $line;
              } while (!
              feof($fp));

                      
              fclose($fp);
              }
              ?>

              Kommentar


              • #8
                Mhm...

                Warum verlässt du die Schleife dann nicht sobald du dein gewünschtes Resultat hast?

                Deine Beispielausgabe im Eingangspost legt das Vorgehen jedenfalls nahe...
                "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                Kommentar


                • #9
                  Hmm, ich glaube ich steh aufm Schlauch.
                  Verlässt er die schleife nicht automatisch sobald er alles ausgelesen hat.

                  Kommentar


                  • #10
                    PHP: feof - Manual User contributed note #3 von jakicoll

                    Please note that feof() used with TCP-Connections, returns false as long as the connection is open.
                    It even returns false when there is no data available.
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X