+ Antworten
Ergebnis 1 bis 3 von 3

Thema: PHP exec() Problem

  1. #1
    gateway
    Gast Avatar von gateway

    PHP exec() Problem

    Hi Leute...
    Ich hab ein ganz fettes Prob mit PHP....

    $query2 = "SELECT * FROM pinghosts ORDER BY iphost";
    $hostlist2 = mysql_query($query2);

    echo "<table border=1 cellspacing=1 cellpadding=1>";
    echo "<tr><td bgcolor=\"BBBBBB\">Hostname</td><td bgcolor=\"BBBBBB\">Beschreibung</td><td bgcolor=\"BBBBBB\">Status</td></tr>";

    while($row2 = mysql_fetch_object($hostlist2))
    {
    echo "<tr><td bgcolor=\"BBBBFF\">";
    echo $row2->iphost;
    echo "</td><td bgcolor=\"BBBBFF\">";
    echo $row2->description;
    echo "</td><td";

    $pingstatus = exec("ping -n 1 ".$row2->iphost,$directoutput,$returnval);
    $pingstat = explode("(",$directoutput[6]);
    $pingstatclean = explode("%",$pingstat[1]);
    $lost = $pingstatclean[0];

    if($lost == 0)
    {
    echo " bgcolor=\"00CC00\">pingable".$lost;
    }
    else
    {
    echo " bgcolor=\"CC0000\">not pingable".$lost;
    }
    echo "</td></tr>";
    }
    echo "</table>";

    Das Problem ist nun... Bei der while schleife fürs auslesen jeder einzelnen Zeile nimmt die Variable $lost, also die die den Datenverlust beim Ping anzeigt den ersten RICHTIGEN wert der ersten Zeile an. Allerdings dieser Wert bleibt dann unverändert für alle anderen Zeilen...
    Also der Eintrag für alle anderen Dinge wie hostname oder beschreibung ändern sich und nur der WErt der neu berechnet werden soll wird nicht neu berechnet... Vielleicht ist es ja schon spät und ich checks gerade nicht... Wäre für jede Hilfe dankbar..

    LG

    Gate

  2. #2
    Urgestein Avatar von Montoyafan

    Registriert seit
    24.6.04 - 16:21
    Beiträge
    520
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Hallo,

    Du solltest das Array $directoutput bei jedem Durchlauf freigeben, da exec() sonst an das Array anhängt anstatt es neu zu beschreiben wenn das Array bereits Werte enthält.

    Logisch das der Wert dann unverändert bleibt beim 2. Durchlauf, da ja $directoutput[6] dann immer noch den selben Wert enthält den es beim ersten Durchlauf erhalten hat

    Deine While-Schleife sollte also aus aussehen, dann sollte es gehen:

    while($row2 = mysql_fetch_object($hostlist2))
    {
    echo "<tr><td bgcolor=\"BBBBFF\">";
    echo $row2->iphost;
    echo "</td><td bgcolor=\"BBBBFF\">";
    echo $row2->description;
    echo "</td><td";

    unset($directoutput);

    $pingstatus = exec("ping -n 1 ".$row2->iphost,$directoutput,$returnval);
    $pingstat = explode("(",$directoutput[6]);
    $pingstatclean = explode("%",$pingstat[1]);
    $lost = $pingstatclean[0];

    if($lost == 0)
    {
    echo " bgcolor=\"00CC00\">pingable".$lost;
    }
    else
    {
    echo " bgcolor=\"CC0000\">not pingable".$lost;
    }
    echo "</td></tr>";
    }

    Cu

  3. #3
    gateway
    Gast Avatar von gateway
    Jop genau das wars... bin zwar schon heute nachmittag draufgekommen aber trotzdem besten dank....

    LG

    Gate

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Ja
  • Beiträge bearbeiten: Ja
  •