Alexander P.: Include: Time-Out festlegen?

Ich binde mit PHP include eine Datei von einem anderen Server in meine Homepage ein.

Wenn der andere Server mal nicht reagiert, wird meine Homepage nur unvollständig dargestellt.

Gibt es eine Möglichkeit, selbst einen Time-Out festzulegen? Nach 5-10 Sekunden soll der Versuch, die Datei per include zu laden abgebrochen werden, falls der andere Server bis dahin nicht geantwortet hat.

Vielen Dank im Voraus.

  1. Hi,--> das ist eine Anrede

    Gibt es eine Möglichkeit, selbst einen Time-Out festzulegen? Nach 5-10 Sekunden soll der Versuch, die Datei per include zu laden abgebrochen werden, falls der andere Server bis dahin nicht geantwortet hat.

    Fang den Fehler ab, da gibt es mehrere Möglichkeiten.
    zB.
    If(!@include("http://deinserver/bla.php")) echo "die Seite konnte nicht geladen werden;

    ciao
    romy --> und Aufwiedersehen sagen ist auch höflich

    bitte ...

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Gibt es eine Möglichkeit, selbst einen Time-Out festzulegen? Nach 5-10 Sekunden soll der Versuch, die Datei per include zu laden abgebrochen werden, falls der andere Server bis dahin nicht geantwortet hat.
      Fang den Fehler ab, da gibt es mehrere Möglichkeiten.
      zB.
      If(!@include("http://deinserver/bla.php")) echo "die Seite konnte nicht geladen werden;

      damit hast du aber immer noch den standard-timeout drin, der ziemlich lange sein kann.
      es ging ihm aber um eine verkürzung, "probiere es fünf sekunden lang, wenn der andere server in der zeit nichts zurückliefert, dann nach ohne die include-datei weiter."

      afaik kann man bei fsockopen() einen timeout mitgeben; damit an daten zu gelangen macht die sache aber wesentlich komplizerter als ein einfaches include.

      1. Danke für die Antworten.

        Das ganze scheint komplizierter zu sein, als angenommen.

        Ich werde es wohl so einrichten, dass die Datei von dem anderen Server erst nach Betätigen eines Buttons auf meiner HP includiert wird. So wird die Seite wenigstens im Normalfall korrekt angezeigt.

        cu

      2. Hi,

        damit hast du aber immer noch den standard-timeout drin, der ziemlich lange sein kann.
        es ging ihm aber um eine verkürzung, "probiere es fünf sekunden lang, wenn der andere server in der zeit nichts zurückliefert, dann nach ohne die include-datei weiter."

        nun würde mich es aber wirklich mal interessieren. Wir hatten letztens doch so eine Sache mit fopen()
        http://forum.de.selfhtml.org/archiv/2003/5/47138/#m257218

        also wenn ich den include-Befehl bzw. auch den fopen-Befehl aufrufe und die Datei oder der server nicht existiert bekomme ich in weniger als einer Sekunde das Ergebnis. Liegt das jetzt an meinem schnellen Server oder hat das andere Ursachen?
        Ich frage, weil ich nicht gewisse Sachen umschreiben will, nur weil sie später oder auf anderen Servern nicht mehr funktionieren.

        ciao
        romy

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
        Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
        Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
        1. hi romy,

          also wenn ich den include-Befehl bzw. auch den fopen-Befehl aufrufe und die Datei oder der server nicht existiert bekomme ich in weniger als einer Sekunde das Ergebnis. Liegt das jetzt an meinem schnellen Server oder hat das andere Ursachen?

          es gibt da m.e. verschiedene möglichkeiten, die man differenzieren muss:

          möglichkeit a)
          server ist erreichbar, die angeforderte datei gibt es aber nicht auf dem server. der server schickt sofort einen 404er zurück -> kein timeout-problem.

          möglichkeit b)
          der server an sich ist gar nicht existent. dein server, auf dem php läuft, merkt recht schnell (genau wie dein browser in so einem fall idR auch), dass sich zu dem angegebenen domainnamen beim DNS-server keine IP ermitteln lässt -> dieser fehlerfall ist auch schnell abgehakt.

          möglichkeit c)
          der server ist existent, aber schlecht oder gar nicht erreichbar.
          genau _das_ ist m.e. der fall, wo du mit einem langen timeout zu kämpfen hast. dein php-script schickt den request los, es kommt kein 404er, und kein negativer bescheid vom dns-server, also wird jetzt erstmal längere zeit auf eine antwort vom server gewartet.
          und dieses problem wirst du wahrscheinlich auch haben, denke ich, wenn du es mit deinem script versuchst. ist nur nicht so einfach zu testen, da man dafür halt einen extrem schlecht erreichbaren server braucht (vllt. sollte man es mit forum.de.selfhtml.org versuchen? *g*)

          gruss,
          wahsaga

          1. Ich denke, ich habe eine Lösung gefunden.

            Beim Öffnen einer Datei mit fsockopen kann man selbst einen TimeOut festlegen. Daher werde ich zunächst versuchen, die Datei mit diesem Befehl zu öffnen. Nach 5 Sekunden ist der TimeOut erreicht, eine Fehlermeldung wird zurückgegeben.

            Ob der Zugriff erfolgreich war, kann ich dann mit einer if-Abfrage überprüfen und das includieren gegebenenfalls überspringen.

            cu

            1. Hi,

              Ich denke, ich habe eine Lösung gefunden.

              fast ;)

              Beim Öffnen einer Datei mit fsockopen kann man selbst einen TimeOut festlegen. Daher werde ich zunächst versuchen, die Datei mit diesem Befehl zu öffnen. Nach 5 Sekunden ist der TimeOut erreicht, eine Fehlermeldung wird zurückgegeben.

              habe ich auch gleich umgesetzt, und bin auch gleich eauf ein Problem gestossen, welches diese Lösung wieder ausser Kraft setzt (leider) Wenn nämlich die IP erreichbar ist, aber der webserver nicht, geht es wieder in eine Endlosschleife...
              Was soll man da noch machen? Hoffen, dass es nicht auftritt?

              ciao
              romy

              --
              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
              sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
              Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
              Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
              1. hi,

                Beim Öffnen einer Datei mit fsockopen kann man selbst einen TimeOut festlegen. Daher werde ich zunächst versuchen, die Datei mit diesem Befehl zu öffnen. Nach 5 Sekunden ist der TimeOut erreicht, eine Fehlermeldung wird zurückgegeben.
                habe ich auch gleich umgesetzt, und bin auch gleich eauf ein Problem gestossen, welches diese Lösung wieder ausser Kraft setzt (leider) Wenn nämlich die IP erreichbar ist, aber der webserver nicht, geht es wieder in eine Endlosschleife...

                was meinst du mit "wenn eine ip erreichbar ist, aber der webserver nicht"?

                bei fsockopen gibst du IP und port an, darüber ist doch bei port=80 idR schon eindeutig festgelegt, dass du versuchst mit dem webserver auf der rechner mit der IP zu sprechen.

                wenn dieser jetzt nicht innerhalb der gesetzten frist antwortet, sollte meinem verständnis nach der gesetzte timeout zuschlagen, und fsockopen einen fehler zurückliefern.

                gruss,
                wahsaga

                1. Hi,

                  was meinst du mit "wenn eine ip erreichbar ist, aber der webserver nicht"?
                  bei fsockopen gibst du IP und port an, darüber ist doch bei port=80 idR schon eindeutig festgelegt, dass du versuchst mit dem webserver auf der rechner mit der IP zu sprechen.

                  Ich meine damit, dass es möglich sein kann, dass die Ip anpingbar ist, aber trotzdem der webserver abgestürzt. Ich kann mich täuschen, bloss dann frage ich mich, wieso bei diesem Zustand das timeout von fsockopen bei mir nichts gebracht hat. Er hat trotzdem geladen bis er nicht mehr konnte. Habe ich aber eine Sinnlosadresse angegeben kam das Ergebnis sofort.
                  Kenne mich in dieser Materie wenig aus. Aber ich dachte, dass eine Adresseauch ohne webserver erreichbar ist!?

                  ciao
                  romy

                  --
                  DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                  sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
                  Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
                  Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
                  1. hallo romy,

                    Ich meine damit, dass es möglich sein kann, dass die Ip anpingbar ist, aber trotzdem der webserver abgestürzt. Ich kann mich täuschen, bloss dann frage ich mich, wieso bei diesem Zustand das timeout von fsockopen bei mir nichts gebracht hat. Er hat trotzdem geladen bis er nicht mehr konnte. Habe ich aber eine Sinnlosadresse angegeben kam das Ergebnis sofort.
                    Kenne mich in dieser Materie wenig aus. Aber ich dachte, dass eine Adresseauch ohne webserver erreichbar ist!?

                    ein ping hat erstmal nichts mit dem webserver zu tun, sondern generell nur damit, ob unter der verwendeten IP-adresse überhaupt irgendein rechner erreichbar ist.

                    wie ich weiter oben schon schrieb,

                    bei fsockopen gibst du IP und port an, darüber ist doch bei port=80 idR schon eindeutig festgelegt, dass du versuchst mit dem webserver auf der rechner mit der IP zu sprechen.

                    ein ping und ein connect-versuch mit fsockopen sind afaik zwei unterschiedliche sachen.
                    es werden ja auch unterschiedliche protokolle verwendet.
                    der ping ist bestandteil des ICMProtokolls (Internet Control Message Protocol), während du bei einem fsockopen eine TCP-verbindung herstellst (zitat manual: "Für eine Internet-Verbindung wird eine TCP-Socket-Verbindung zu hostname über den Port port hergestellt.")
                    da der port explizit angegeben wird (in unserem beispiel ja port 80), sollte der rechner also, sofern dort kein webserver-dienst läuft (und auch kein anderer dienst auf port 80 lauscht), mit einem ICMP Typ 3 - Destination Unreachable/Ziel nicht erreichbar antworten ("Diese Nachricht wird von einem Gateway oder dem Zielrechner verschickt, falls das Gateway das angegebene Netz oder der Zielrechner ein Protokoll der höheren Schicht oder einen Port nicht erreichen kann." zitat http://www.protecus.de/Firewall_Security/icmp.html).

                    leider gibt es leute, die z.b. ihre firewall so konfigurieren, dass nicht alle ICMP-typen zugelassen werden, nach dem motto "was geht mich die stabilität des internet-datenverkehrs an".
                    da manche ICMP-typen auch für (d)DoS-angriffe missbraucht werden können, könnte dies als z.b. von deinem provider, oder aber von der gegenstelle geblockt worden sein, was natürlich eine zeitnahe übermittlung einer nichtverfügbarkeitmeldung des von dir per fsockopen angesprochenen webserverdienstes auf dem zielrechner behindert...

                    gruss,
                    wahsaga