fsockopen / file timeout erzeugen

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

  • fsockopen / file timeout erzeugen

    Hallo,
    ich habe ein kleines Problem. Ich habe ein Script geschrieben, dass checken soll, ob ein Forum online ist und wenn es offline ist, soll es die Zeit in eine Datenbank schreiben. So weit, so gut.

    Jetzt habe ich das Problem, dass das Script, wenn der Server nicht oder nur sehr sehr langsam reagiert ewig braucht. Ich wollte also mittels fsockopen vorher checken, ob der Server innerhalb einer bestimmten Zeit reagiert (timeout). Aber das funktioniert irgendwie nicht richtig und ich weiss nicht, woran das liegt.

    Mein Code sieht folgendermassen aus:
    PHP-Code:
    /* Datenbank-Daten */
    $server"servername";
    $user"username";            
    $passwort"*****";            
    $datenbank"datenbankname";        
    $tabelle"downtime";
    $timestamp date('YmdHis');

    /* Zugriff auf SQL-Server und Abfragen der Tabelle */
    MYSQL_CONNECT($server$user$passwort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
    MYSQL_SELECT_DB($datenbank) or die ("<H3>Datenbank nicht vorhanden</H3>");

    /* Timeout von 3 sekunden eingefügt */
    $sql1 "INSERT INTO $tabelle (date, site) VALUES ($timestamp, 'seite')";
    $fp1 fsockopen("seitenname.com"80$errno$errstr3);

    /* Abfrage der Seite, falls Server reagiert */
    if (!$fp1){
            
    $result mysql_query($sql1) or die (mysql_error()); 
            echo 
    "Timeout<br>";
            
        } else {
            if(
    backlinkCheck("http://seitenname.com/index.php""Warning")) {
            
    $result mysql_query($sql1) or die (mysql_error()); 
            echo 
    "Seite: Warning gefunden<br>";
            } else { echo 
    "Seite: Seite ok!<br>";}
        }
        
        
    /* Überpruft, ob in der Seite $siteurl der Test $recip vorkommt */
    function backlinkCheck($siteurl$recip) {
        
    $arrText file($siteurl);
        for (
    $i=0$i<count($arrText); $i++) {
            
    $text $text $arrText[$i];
        }
        if (
    eregi($recip$text)) {
            
    $text "";
            return 
    true;
        } else {
            
    $text "";
            return 
    false;
        } 
    Wenn der Server nicht erreichbar ist, dann braucht das Script 100 bis 200 sekunden, wenn der Server geht nur 7 sekunden. Durch
    PHP-Code:
    $fp1 fsockopen("seitenname.com"80$errno$errstr3); 
    wollte ich eigentlich erreichen, dass er nach 3 sekunden aufhört die Seite aufzurufen und mit ein Timeout zurückgibt und es dann als fehlgeschlagenen Versuch wertet, aber irgendwie klappt das nicht so ganz.

    Ich hoffe, ihr könnt mir hier helfen.

    Gruss,
    Steffi
    Stefanie Gwinner

  • #2
    wo ist denn das http:// abgeblieben?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Unter http://de.php.net/fsockopen wird fsockopen auch immer ohne http:// geschrieben.. habs also genauso gemacht wie da.. nur die udp, ssl Beispiele haben halt udp://, ssl:// vorherstehen.. http:// geht ohne den zusatz
      Stefanie Gwinner

      Kommentar


      • #4
        ok. war evtl ein fehler meinerseits... wenn ich mit fsockopen() was mache, löse ich den namen aber auf und arbeite mit der ip weiter. das funktioniert bei mir 100%ig.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Hmm.. vielleicht liegt es auch einfach an meinem Hoster, dass es manchmal zu lange dauert.. eben war der angefragt Server auch down und das Script lief trotzdem einigermassen schnell.

          Also am Code ist deiner Meinung nach nichts falsch?
          Stefanie Gwinner

          Kommentar


          • #6
            Original geschrieben von Jedira
            Also am Code ist deiner Meinung nach nichts falsch?
            ich habe mit nur den einzeiler *) angeschaut. der rest interessiert(e) mich nicht.

            *) der scheint ok zu sein. aber ich würde es u.u. noch mit der ip machen.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Hmm.. ich habe jetzt noch IP statt URL eingegeben, aber irgendwas ist immer noch falsch.

              Ich bekomme zur Zeit manchmal die Ausgabe:

              Warning: file(http://website.com/forum/index.php): failed to open stream: HTTP request failed! 0 in /is/htdocs/234265/www.mysite.de/backlinkCheck.php on line 66
              Seite: Seite ok!


              Script in 185.93522000313 Sekunden


              Allerdings dürfte die Ausgabe "Seite: Seite ok!" gar nicht kommen, wenn das File nicht geöffnet werden kann, bzw. eigentlich haette der fsockopen die Möglichkeit, dass die Seite nicht geöffnet werden kann, vorab rausfiltern sollen. Gibt es eigentlich eine Möglichkeit direkt das file() abzubrechen, wenn es zu lange dauert? Also ohne darauf zu warten, dass es die Fehlermeldung "failed to open stream" zurückgibt?
              Stefanie Gwinner

              Kommentar

              Lädt...
              X