Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Ping an viele Hosts senden [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Ping an viele Hosts senden


 
Myxomatosis
19-01-2010, 11:33 
 
Hallo Community,

ich schreibe im Moment ein PHP-Skript um die Rechner in unserem Netzwerk bequem per Wake On Lan einschalten zu können. Das einschalten klappt einwandfrei. Nun möchte ich neben dem Namen eines jeden Rechners noch anzeigen lassen ob der PC ein- bzw. ausgeschalten ist.

im Moment habe ich dafür folgenden Code:


<?php
$file = fsockopen('udp://'.$Rechnername.'', 80, $errno,$errstr, 0.01);
if (!$file)
{
echo'<img src="pingstatusoffline.png" width="15" height="15" alt="offline">';
}
else
{
echo'<img src="pingstatusonline.png" width="15" height="15" alt="online">';
}
fclose($file);
?>


Dieser befindet sich in einer Schleife und wird für jeden der ca. 400 Hosts ausgeführt.
Das Problem ist, dass die Abfragen sehr lange dauern und währenddessen die restliche Seite noch nicht dargestellt wird.

Das Skript sollte aber so sein, dass die Übersichtstabelle sofort dargestellt wird und danach der http-Server versucht alle Hosts anzupingen und enstprechend der Rückmeldung online oder offline anzeigt.
Die "Mainpage" und die einzelnen Pings müssten also unabhängig voneinander laufen.
Ich hab leider keine Idee, wie ich das umsetzen könnte.

Hat jemand eine Idee?

Danke schonmal
Gruß Max

 
onemorenerd
19-01-2010, 12:38 
 
Lade den Status per AJAX nach oder benutze ein Java-Applett, um direkt aus dem Client zu pingen.

 
AmicaNoctis
19-01-2010, 15:42 
 
Hallo,

du kannst auch für jeden Host den Status direkt im Bild abrufen, z. B. <img src="status.php?hostname=..." alt="Status für Host ..." />

Dann kümmert sich der Browser darum, die Bilder nachzuladen. Die status.php übernimmt dabei erst die eigentliche Überprüfung und gibt eins der beiden Bilder zurück.

Gruß,

Amica

 
Myxomatosis
19-01-2010, 16:46 
 
Hallo,

du kannst auch für jeden Host den Status direkt im Bild abrufen, z. B. <img src="status.php?hostname=..." alt="Status für Host ..." />

Dann kümmert sich der Browser darum, die Bilder nachzuladen. Die status.php übernimmt dabei erst die eigentliche Überprüfung und gibt eins der beiden Bilder zurück.

Gruß,

Amica


Danke, genau nach sowas habe ich gesucht!
Aber wie muss die status.php aussehen, dass ich ein Bild zurückbekomme? Im moment habe ich nur ein rotes Kreuz....

<?php
$file = fsockopen('udp://'.$_GET['hostname'].'', 80, $errno,$errstr, 0.05);
if (!$file)
{
echo'<img src="pingstatusoffline.png" width="15" height="15" alt="offline">';
}
else
{
echo'<img src="pingstatusonline.png" width="15" height="15" alt="online">';
}
fclose($file);
?>

 
AmicaNoctis
19-01-2010, 16:50 
 
Aber wie muss die status.php aussehen, dass ich ein Bild zurückbekomme? Im moment habe ich nur ein rotes Kreuz....

Momentan gibst du ja auch HTML-Code aus. Du musst dann natürlich die Bilddaten ausgeben (readfile) und vorher einen entsprechenden Header setzen: header("Content-Type: image/png");

 
Myxomatosis
19-01-2010, 17:00 
 
Momentan gibst du ja auch HTML-Code aus. Du musst dann natürlich die Bilddaten ausgeben (readfile) und vorher einen entsprechenden Header setzen: header("Content-Type: image/png");


Super, funktioniert! Vielen Dank!

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:03 Uhr.