Ankündigung

Einklappen
Keine Ankündigung bisher.

fgets-Fehler abfangen

Einklappen

Neue Werbung 2019

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

  • fgets-Fehler abfangen

    Hallo,

    ich habe ein Scripts programmiert, welches über fsockopen viele SSL Verbindungen zu einem Server aufbaut und Daten liest und schreibt. Das funktioniert soweit super, nur ab und zu kommt die Fehlermeldung:

    Code:
    Warning: fgets() [function.fgets]: SSL: Eine vorhandene Verbindung wurde vom Remotehost geschlossen.
    Ich möchte nun, dass wenn diese Fehlermeldung auftaucht, einfach der komplette Request nach einer Wartezeit von ein paar Sekunden neu gestartet wird. Leider bekomme ich den Fehler nicht über try - catch Blöcke abgefangen... Wie kann ich vorgehen?

    Aktuell sieht das Script wie folgt aus:

    PHP-Code:
    do {
        
    $error false;
        if(
    $fp fsockopen($host$port)) {
            if(
    false !== fwrite($fp$header."\r\n\r\n".$data)) {
                
    $response '';
                while(!
    feof($fp)) {
                    try {
                        
    $response .= fgets($fp4096);
                    } catch (
    Exception $e) {
                        echo 
    'Fehler erkannt';
                        
    $error true;
                    }
                }
            } else
                
    $error true;
            
    fclose($fp);
        } else
            
    $error true;
        if(
    $error)
            
    sleep(1);
    } while(
    $error); 
    Danke

  • #2
    Wie kann ich vorgehen?
    Rückgabewert von fgets korrekt beachten?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Alles klar Folgendes hatte ich in der Doku leider übersehen...

      Code:
      Wenn ein Fehler auftritt, wird FALSE zurückgegeben.

      Kommentar


      • #4
        Geht also mit den Rückgabewerten? Ich hatte mehr geraten..
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Jein...

          Es ist ein neues Problem aufgetreten.

          Aktuell lese ich den Inhalt wie folgt aus:

          PHP-Code:
          $response '';
          while(!
          feof($fp)) {
              
          $response_part fgets($fp);
              if(
          false !== $response_part)
                  
          $response .= $response_part;
              else {
                  
          $error true;
                  break;
              }

          Wenn ich nun als Antwort eine Weiterleitung bekomme (Statuscode 302, Content-Length natürlich 0) gibt der letzte Aufruf von fgets ein "false" zurück, obwohl gar kein "Fehler" aufgetreten ist, es gibt eben nur keinen Body... Ich möchte jetzt ungern einfach auf das "HTTP/1.1 302 Found" am Anfang prüfen, weil das aus meiner Sicht keine solide Lösung ist...

          Vor dem letzten fgets, der zum "false" führt, gibt eof übrigens ein false, danach ein true.

          Edit 1:
          Dieses Problem taucht auch nicht generell bei 302er Responses auf...

          Edit 2:
          Dieses Problem scheint sich doch nicht nur auf 302er Codes zu beziehen, sondern taucht auch bei 200er auf... Wann es auftaucht und wann nicht, ist mir aber schleierhaft, weil ich immer exakt die gleichen 5 Requests ausführe und das Problem mal gar nicht, mal bei ein oder zwei immer unterschiedlichen Requests auftaucht...

          Kommentar

          Lädt...
          X