fopen() - Timeout möglich?

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

  • fopen() - Timeout möglich?

    Hallo Forum,

    ich kämpfe gerade mit einem Script, daß via fopen() eine externe URL öffnet und regelmäßig "hängt", da die Quelle nicht oder nicht schnell genug antwortet.

    Zwar frage ich den Zielhost vorher mit fsockopen() ab, mein Problem ist aber, daß ich den Port zügig öffnen kann (Verbindung ist Ok), die Gegenstelle dann aber keine Daten sendet, weil der Server überlastet ist.

    Kann mir jemand einen Tipp geben, wie ich in das folgende Beispiel einen Timeout für fopen() integrieren kann?

    PHP-Code:
    <?
    if ( @fsockopen("www.hostname.de", 80, $errno, $errstr, 5) {

    $source = "http://www.hostname.de";
    $fp = @fopen ($source, "r");

    print $data = @fread($fp,2048);

    fclose($fp);

    }
    ?>

  • #2
    vielleicht socket_set_timeout?

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hab ich schon probiert, das hier klappt bei mir nicht:

      PHP-Code:
      $fp = @fopen ($source"r");
      stream_set_timeout($fp2);
      print 
      $data = @fread($fp,2048); 

      Kommentar


      • #4
        Re: fopen() - Timeout möglich?

        Du weißt aber schon, dass fsockopen eine Verbindung öffnet und du diese einfach verfallen lässt um dann mit fopen rumzuhantieren?
        Warum???
        Speicher die Rückgabe von fsockopen (wo du auch ein Timeout festlegen kannst (80)), und spiel mit fputs und fread rum (siehe Tuts oder Manual)

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Re: Re: fopen() - Timeout möglich?

          @ghostgambler: Du hast natürlich recht, dass das doppelte Aufbauen der Verbindung unsinnig ist (vielleicht sogar kontraproduktiv, denn die mittels fsockopen geöffnete Verbindung wird ja im gezeigten Code nicht mal wieder geschlossen, unsere laut Problembeschreibung eh schon überlastete Gegenstelle muss jetzt also sogar zwei Verbindungen mit uns erst mal offenhalten) - aber am grundsätzlichen Problem ändert sich auch durch Verwendung von fsockopen + fread nichts, wenn die Gegenstelle zwar auf die Verbindungsanfrage relativ zügig reagiert, dann aber mit dem Ermitteln der Daten, die sie zurückgeben soll, nicht in die Pötte kommt.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            unter stream_set_timeout ist doch schon die lösung angegeben mit fsockopen, brauch er doch nur noch übernehmen.

            Kommentar


            • #7
              Die mit "fsockopen" geöffnete Verbindung wird später wieder geschlossen - ich wollte nur ein Beispiel bringen und nicht das gesamte Script posten.

              Ich habe das Problem nun mit

              PHP-Code:
              ini_set('default_socket_timeout',1); 
              gelöst, klappt bei mir wunderbar. Im Gegensatz zum Stream-Timeout.

              Kommentar


              • #8
                Re: Re: fopen() - Timeout möglich?

                Original geschrieben von ghostgambler
                Speicher die Rückgabe von fsockopen (wo du auch ein Timeout festlegen kannst (80)), und spiel mit fputs und fread rum (siehe Tuts oder Manual) [/B]
                Wie Du siehst, hat mein fsockopen einen Timeout von 5 Sekunden.

                Kommentar

                Lädt...
                X