Ping auswerten?
Nicolas Muehlen
- php
Hallo zusammen,
kennt jemand von euch eine Möglichkeit, die Ergebnisse eines Pings über PHP weiter auszuwerten? Normalerweise gibt der Server die Ergbnisse ja in folgender Form aus:
Success rate is 100 percent (5/5), round-trip min/avg/max = 24/24/28 ms
Die durschnittliche Zeit (avg) würde ich jetzt gerne weiter auswerten, indem ich sie mit der durchschnittlichen Zeit eines anderen Servers in Form eines Balkendiagramms vergleiche, aber dazu müsste ich diese Zahl ja erst einmal aus diesem vom Server ausgegebenen Text isolieren. Ist das generell überhapt möglich? Oder gibt es da vielleicht noch eine andere Möglichkeit als den Ping, die Geschwindigkeit eines Servers zu ermitteln?
Viele Grüsse und danke,
Nicolas Muehlen
Hallo zusammen,
kennt jemand von euch eine Möglichkeit, die Ergebnisse eines Pings über PHP weiter auszuwerten? Normalerweise gibt der Server die Ergbnisse ja in folgender Form aus:Success rate is 100 percent (5/5), round-trip min/avg/max = 24/24/28 ms
Die durschnittliche Zeit (avg) würde ich jetzt gerne weiter auswerten, indem ich sie mit der durchschnittlichen Zeit eines anderen Servers in Form eines Balkendiagramms vergleiche, aber dazu müsste ich diese Zahl ja erst einmal aus diesem vom Server ausgegebenen Text isolieren. Ist das generell überhapt möglich? Oder gibt es da vielleicht noch eine andere Möglichkeit als den Ping, die Geschwindigkeit eines Servers zu ermitteln?
Viele Grüsse und danke,
Ich denke mal, die Zahlen kannst du mit Regexp herausfiltern. Und dann kannst du das Diagramm mit GD zeichnen. Ich bin mir nicht sicher, ob PHP eine interne Ping-Funktion hat, oder ob man dazu externe Zusatzprogramme braucht.
Hallo Erik,
die Möglichkeit habe ich auch schon in Betracht gezogen, allerdings finde ich keine Möglichkeit, daß Ergebnis der Abfrage in eine Variable umzuwandeln, um diese dann mit den RegExp zu filtern. Das Script, welches ich benutze, sieht so aus:
exec("ping -c 4 -s 65 www.yahoo.com", $list);
for ($i=0;$i < count($list);$i++) {
print $list[$i]."\n";
}
Das sieht dann in der Ausgabe so aus:
PING www.yahoo.akadns.net (216.32.74.52): 65 data bytes
73 bytes from 216.32.74.52: icmp_seq=0 ttl=245 time=132.6 ms
73 bytes from 216.32.74.52: icmp_seq=1 ttl=245 time=131.8 ms
73 bytes from 216.32.74.52: icmp_seq=2 ttl=245 time=101.3 ms
73 bytes from 216.32.74.52: icmp_seq=3 ttl=245 time=95.2 ms
--- www.yahoo.akadns.net ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 95.2/115.2/132.6 ms
Klar, in der vorletzten Zeile des Scriptes werden die Ergebnisse dann Zeilenweise ausgegeben, aber wie schaffe ich es, diese (und vor allem die Statistik am Schluss) in eine Variable umzuwandeln?
Viele Grüsse,
Nicolas Muehlen
Hi Nicolas,
folgendes sollte funzen:
exec("ping -c 4 -s 65 www.yahoo.com", $list);
$test = explode("/",substr($list[count($list)-1],32));
print $test[1]."\n"; // 0=min 1=avg 2=max 3=stddev
MfG Olli
Hi Olli,
danke, du bist genial :-) Das ist genau das, was ich gesucht habe.
Viele Grüsse,
Nicolas Muehlen
Nahmd,
die Möglichkeit habe ich auch schon in Betracht gezogen, allerdings finde ich keine Möglichkeit, daß Ergebnis der Abfrage in eine Variable umzuwandeln, um diese dann mit den RegExp zu filtern. Das Script, welches ich benutze, sieht so aus:
Also mein Script sieht in core so aus:
my $ping_erg = ping -c 5 $ping\_string 2> /dev/null
;
und in $ping_erg steht dann sowas wie bei Dir:
PING 212.12.33.50 (212.12.33.50): 56 data bytes
64 bytes from 212.12.33.50: icmp_seq=0 ttl=255 time=0.245 ms
64 bytes from 212.12.33.50: icmp_seq=1 ttl=255 time=0.105 ms
64 bytes from 212.12.33.50: icmp_seq=2 ttl=255 time=0.098 ms
64 bytes from 212.12.33.50: icmp_seq=3 ttl=255 time=0.115 ms
64 bytes from 212.12.33.50: icmp_seq=4 ttl=255 time=0.100 ms
--- 212.12.33.50 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.098/0.132/0.245 ms
-> also einfach ein Systembefehl zwischen zwei mach scho...
Test it on http://www.i-netlab.de/cgi-bin/wwwping.cgi
Vielleicht gehts so?
Viele Grüße, Rolf