Sponsor-Board.de

Normale Version: PHP onlien/offline/ausgelastet
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community!
Ich entschuldige mich schon mal fals ich es hier falsch poste :-D

Habe leider nicht die erfahrung genug um das zu hin zu bekommen.

Wir haben für unsere seite ein kleines "Server Status" gebaut. nur wollte ich eine online/offline anzeige einbauen. Soweit kein Problem.

Nun möchte ich allerdings ein dritte "bild" einfügen wenn der server ausgelastet ist. wenn der server ein ping über 100ms (evt frei einstellbar) hat.

Ich habe bereits du viele tuturials das zusammen bauen können. mit ip / port / timeout
So jetzt fehlt mir die anzeige "ausgelastet" wo er dann ping über 100 auf dieses bild dan geht.

PHP-Code:
PHP-Code:
<?
php

$server1  
"ip"$port1 ="port";
$timeout "100";

if (
$server1 and $port1 and $timeout) {
    
$root1 =  @fsockopen("$server1"$port1$errno$errstr$timeout);
    }
    
    
  if(
$root1) {
    echo 
"<img src=/status/on.gif>";
  }
  else {
    echo 
"<img src=/status/off.gif>";
  }
?>


Kann mir da einer helfen? keine ahnung wie ich das anstellen soll^^ bin über jede hilfe dankbar

-
wow danke!

habe grade das script ausprobiert. Also er zeigt mir ein ping an. so wollte ich das eig nicht.
Er sollte das nur als bild wieder geben falls der ping höher ist.

was mir noch aufgefallen ist. Was machen wir mit "time out" das script nicht in der schleife hängt und sondern dierekt als offline makiert wird?



Und wie kombiniere ich das jetzt mit meins?^^
Moin!

iTweek schrieb:
habe grade das script ausprobiert. Also er zeigt mir ein ping an. so wollte ich das eig nicht.
Er sollte das nur als bild wieder geben falls der ping höher ist.



Es sollte nicht schwer sein dass jetzt zu kombinieren? Ich verstehe da das Problem nicht. Etwas überlegen und dann kommt man selbst darauf Wink

Nehmen wir als Ausgang deinen Code und vergleichen ihn mit seinem, dann fällt eine Besonderheit auf. Er benutzt die PHP-Funktion microtime, welche die Zeit in Mikrosekunden in eine Variable schreibt. Dann lässt er fsockopen durchlaufen (was ja eine gewisse Zeit braucht) und dann lässt er sich erneut den Wert der microtime geben. Zieht man jetzt ersteren von letzterem ab (der letztere ist mindestens genauso groß) bekommt man die Mikrosekunden, die es länger gedauert hat. So gut, so einfach.

Um es mit deinen einfachen Kenntnissen umzusetzen, mal folgender Code. Das geht natürlich noch "schöner". Aber ist ja hier kein Schönheitswettbewerb Wink

Da du "server1" und "port1" schreibst, benutze ich hier ein Array. Google nach PHP Array, dann kommst du darauf was das tut. Im Zusammenhang mit foreach ergibt dass dann auch Sinn Wink

Code:
<?php
$server = array(
    array(
        'ip' => '127.0.0.1',
        'port' => 80,
        'timeout' => 1,
        'highping' => 100
    )
);

foreach ($server as $item) {
    $timestamp = microtime(true);
    $sock = @fsockopen($item['ip'], $item['port'], $errno, $errstr, $item['timeout']);
    $ping = (microtime(true) - $timestamp) * 1000;
    if($sock !== FALSE) {
        if($ping >= $item['highping']) {
            echo 'Server highping (' + $ping + ')';
        }else{
            echo 'Server online!';
        }
    }else{
        echo 'Server offline';
    }
}


Der Code lässt sich mit beliebig vielen Servern im Array wiederholen. Der Timeout wird in Sekunden angegeben, der Highping in Millisekunden. Der Code wurde von mir nicht getestet, sollte aber funktionsfähig sein. Bei Fragen gerne konkrete Fragen stellen. Anderes beantworte ich nicht, dafür fehlt mir die Zeit Wink

Tip:
- den Timeout-Wert nie höher als 1-5 Sekunden stellen, wenn du mehrere Server hast. Wenn davon mal 2-3 Offline sein sollten wartest du bei einem Timeout von 5 Sekunden schon bis zu 15 Sekunden! Denn so lange ist ja der Timeout Wink und ganz unter uns. Alles nach 1 Sekunde ist als Offline zubetrachten...
- Immer schön sprechende Namen nehmen. Das erleichtert die Fehlersuche enorm
- Ein @ for einer Funktion nur verwenden, wenn garantiert NIE der Fehlercode von PHP benötigt wird
- Code immer lesbar einrücken. Das erleichtert dir die Suche bei viel Quellcode

Hey Danke Danke Danke!

ich bin leider nicht das php guru ;D mache das nur neben bei also nicht aktiv.

Danke euch beiden ihr habt mir sehr geholfen!
Referenz-URLs