Onlinecheck Funktion nur einmal ausführen pro Server

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

  • Onlinecheck Funktion nur einmal ausführen pro Server

    Hallo, hab mal wieder ein Problem und zwar brauch ich Hilfe bei einer Online Check Funktion. Das Problem ist die Funktion darf immer nur einmal pro Server ausgeführt werden. Habs bisher mit der Funktion gelöst, allerdings war wenn (also beim gleichen Server) 20 mal online angezeigt wurde einmal oder x mal offline angezeigt und dann wieder mehr mals online. Hab keine Ahnung woran das liegen könnte. Könnt ihr euch mal bitte meine Lösung anschauen.

    (Ist noch im alten Format und muss updaten, darum will ichs diesmal gleich besser machen)
    PHP-Code:
    function onlinecheck($servername)
    {
        global 
    $servername$port;
        static 
    $hosts;
        if (isset(
    $hosts[$servername]))
        {
            
    $status $hosts[$servername];
        }
        else
        {
            
    $verbunden = @ftp_connect($servername$port);
            if (
    $verbunden)
            {
                
    //echo "konnte Verbinden";
                
    $status 1;
                
    $hosts[$servername] = $status;
            }
            else
            {
                
    //echo "konnte nicht Verbinden";
                
    $status 0;
                
    $hosts[$servername] = $status;
            }
        }
        return 
    $status;

    Aufgerufen wird die Funktion wie folgt:

    for Schleife
    hol Daten aus DB und überprüf pro Ergebnis ob der Server online ist oder nicht oder ob der Server schonmal geprüft wurde.
    $verbunden = onlinecheck($servername);
    if ($verbunden == 1)
    {... }
    if ($verbunden == 0)
    {... }


    Wäre auch dankbar für ne andere bessere Lösung

    Mfg Markus

  • #2
    Ich weiss zwar net, wie der Timeout von Deinem FTP ist, aber vielleicht kommen die Multis daher, dass mehrere Connections offen sind?

    Versuch es doch mal mit fsockopen:
    http://de3.php.net/manual/de/function.fsockopen.php

    Da hast Du wesentlich mehr Kontrolle über den connect und auch bessere Fehlermeldungen. Optional kannst Du auch nen timeout setzen.

    In den Comments stehen ne Menge Hinweise.

    Ach ja: und immer schön fclose() verwenden.
    Konrad

    In a world without walls and fences, who needs Windows and Gates ?
    (Sun Microsystems)

    Kommentar


    • #3
      Stimmt, hab vergessen die Verbindung wieder zu schließen.
      Werd's wohl auf socket umschreiben. Danke für den Tip, ist mir nicht aufgefallen das ich Verbindungen aufbaue, sie aber nicht wieder geschlossen hab.



      Mfg Markus

      Kommentar


      • #4
        dann verrate mir noch, warum $servername global ist, und wofür das static da ist?

        Kommentar


        • #5
          stimmt $servername brauch ich nicht global setzten weil den bekomm ich übergeben.
          static ist doch dafür da das der Wert beim nächsten Aufruf noch vorhanden ist und nicht verloren geht oder?

          Mfg Markus

          Kommentar


          • #6
            ich weiß es eben nicht kenne static nicht so gut. Aber scheint mir auch so. wobei der wert auch da sein sollte, wenn er global ist, oder kann er dann nicht geändert werden. das könnte was sein...

            Kommentar


            • #7

              keine Ahnung, hauptsache es funktioniert.

              Mfg Markus

              Kommentar


              • #8
                Da wollen wir doch schnell noch einmal eine Portion Ahnung servieren

                Geltungsbereich von Variablen
                http://de.php.net/variables.scope
                Konrad

                In a world without walls and fences, who needs Windows and Gates ?
                (Sun Microsystems)

                Kommentar

                Lädt...
                X