Sida 1 av 3

php ping

Postat: 2007-06-14 11:48
av sigun004
hej

jag vill ha hjälp med ett ping skript i php

det ska vara så att när jag går in på min hemsida så ska det stå vilka ip adressr som är online i en lista tex:
192.168.0.111 is online
192.168.0.101 is offline
och så vidare



och så vidare men jag hittar ingen guide eller skript som funkar kan någon hjälpa?


PS: jag vill inte kolla alla ip adresser, jag vill bara skriva in ip adresserna på något sätt i php documentet som ska visas inte alla.

Postat: 2007-06-14 12:18
av Marcus
Jag hittar bara 4 ping-kommandon in PHP.
  • imap_ping — Check if the IMAP stream is still active.
  • maxdb_ping — Pings a server connection, or tries to reconnect if the connection has gone down. (MaxDB)
  • mysql_ping — Ping a server connection or reconnect if there is no connection. (MySQL)
  • pg_ping — Ping database connection (PostgreSQL)
Men jag tror kanske att det här kan vara något som hjälper dig en bit på vägen:

http://se.php.net/manual/en/function.shell-exec.php

Sätt upp en array med de IP-adresser du vill kolla, och så loopar du igenom arrangen och kör:

Kod: Markera allt

$ip = array('192.168.0.111', '192.168.0.101'); // Fyll på denna...
for ($i = 0; $i < count($ip); $i++) {
   $output = shell_exec('ping ' . $ip[$i]);
   // gör vad som behövs med $output...
}
Hoppas det är till någon hjälp.

/marcus

Postat: 2007-06-14 12:22
av tumba25
Om du menar online på forumet så är det ju enklast att kolla i tabellen phpbb_sessions. session_ip och session_time så får du anta att dom som inte varit aktiva på några minuter inte är online längre.

Om du vill kolla på hela siten så bör du nog skapa en tabell i databasen för det och stoppa in ip och tid i den vid alla sidvisningar. Använd session_id så du uppdaterar fälten istället för att skapa nya om besökaren bläddrar runt en stund. Sen kollar du med ditt skript likadant som i exemplet ovan.

Skriptet kan ju kolla båda tabellerna så ser du både dom som är på forumet och dom som är på övriga siten.

Om det är så du menar.

/J

Postat: 2007-06-14 12:34
av sigun004
tumba 25 läs vad jag skrev en gång till...

Postat: 2007-06-14 13:16
av tumba25
Kan inte läsa genom allt så noga på första försöket. :)

/J

Postat: 2007-06-14 15:08
av Kail
Detta blir ju svårt eftersom användare ofta har olika IP-adresser, ibland samma som andra pga av internetoperatörer har en pool med IP-adresser som de delar ut ur när du ansluter dig. Du kan alltså inte binda specifika användare till specifika IP-adresser.

Enklast är att lista "Who's Online", då ser du vilka användare som bläddrar runt och vilket IP de ansluter från.

Postat: 2007-06-14 15:11
av sigun004
men om jag lägger php filen på en server i mitt nätverk och har fast ip på datoerna så kan jag känna av vilka som är online eller offline.

Postat: 2007-06-14 15:44
av Kail
Ja, i en sådan miljö är det möjligt.

Jag föreslår isf att du skapar en tabell i databasen där du registrerar det IP en person ansluter med, och uppdaterar informationen varje gång personen loggar in (dvs IP <-> UID).

I adminpanelen har du sedan en sidan som listar alla användare och använder sig av informationen i sessions och tabellen du skapade (IP <-> UID) för att lista vilka som är anslutna och vilka som inte är det.

Postat: 2007-06-14 22:02
av sigun004
jag väljer nog det första alternativet efter som jag är inte jätte bra i php och är slö

Postat: 2007-06-14 22:14
av sigun004
hjälp mig med kod då då kail

Postat: 2007-06-14 23:11
av Marcus
I en sådan miljö fungerar även min lösning. :D

/marcus

Postat: 2007-06-14 23:22
av sigun004
ja, ska bara få ihop output är inte så bra på det men klarar nog det...

Postat: 2007-06-15 00:10
av Kail
sigun004 skrev:hjälp mig med kod då då kail
Nej, något får du göra själv. :)

Jag kan ge dig råd men jag kommer inte skriva någon kod, det har jag faktiskt inte tid till. Kanske tumba25 kan hjälpa dig komma igång.

Det du behöver till att börja med är en databastabell med uid och ip (int 16).

Postat: 2007-06-15 09:53
av tumba25
Om du ska köra detta på din lokala dator för ditt eget hemma-nätverk kan du lika gärna strunta i databaser och hårdkoda ip'na i skriptet.

Använd Marcus exempel och lägg in ip-numren i en array. Sen när du loopar du genom den skriver du ut x.x.x.x online och/eller x.x.x.x offline beroende på vad output innehåller.

Om du kör

Kod: Markera allt

ping 192.168.0.1
i en cli ser du vad svaret blir när datorn svarar respektive inte svarar.

Om jag skulle skriva något liknande för att använda hemma lokalt tror jag inte att jag skulle välja att köra något via vebbläsaren. Om det är några datorer som inte svarar och du har gott om datorer i nätverket är risken stor för time-out innan skripet är klar.

/J

Postat: 2007-06-15 11:15
av sigun004

Kod: Markera allt

markus 

<?
$ip = array('192.168.0.111', '192.168.0.101'); // Fyll på denna...
for ($i = 0; $i < count($ip); $i++) {
$output = shell_exec('ping ' . $ip[$i]);
// gör vad som behövs med $output...
}


Kod: Markera allt

sigun004
om jag väljer maskus alternativ hur ska jag då skriva $output?
någonting i stil med:
if ($output == true){
$screen = $ip is online}
else {
$screen $ip is offline}

echo "$screen"
?>


ser det rätt ut med båda koderna ihop?