php ping

Diskussion av datorer, inte bara i rent tekniska aspekter utan även i politiska och filosofiska.

Moderator: Moderatorgrupp

Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 09:38
Svar: 0
Ort: Kokkola, Finland.

Inlägg av tumba25 »

Sätt själva koden innanför kodtaggarna när du skriver kod så är det lättare att se.

Kod: Markera allt

if($output == 'Begäran gjorde timeout.')
{
echo $ip[$i] . ': är offline';
}
else
{
echo $ip[$i] . ': är online';
}
Du får alltid någons slags svar från ping även om datorn den pingar inte svarar. Exakt vilket svar du får beror på vilket program som används för att pinga och vilket språk du har inställt.

Lägg koden där Marcus hade

Kod: Markera allt

// gör vad som behövs med $output...
/J
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

Om du testat att använda ping, vet du att det där inte kommer fungera.

ping ger svar vare sig ip-adressen du anropar är online eller offline. Däremot, så ger den olika svar.

Om du då tester om $output är true, så får du sant på det vare sig ip-adressen är online eller offline med andra ord.

Du måste kolla om den innehåller en given sträng (som inte ingår i svaret vid offline).

För detta kolla på:
http://www.php.net/manual/en/function.preg-match.php

/marcus
Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

tumba25 skrev: if($output == 'Begäran gjorde timeout.')
Håller inte, om svaret är på annat språk.

Det finns dessutom fler svar än ovanstående som antyder att en ip-adress är offline. T.ex. om den server du själv är på inte kan hitta en rutt till den efterfråga... i vart fall får jag ibland "Ping request could not find host...".

/marcus
Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
Användarens profilbild
Kail
Administratör
Administratör
Inlägg: 2935
Blev medlem: 2003-06-03 13:53
Svar: 0
Ort: Linköping/Stockholm

Inlägg av Kail »

Jag förstår inte varför du ska använda ping alls. Ville du inte se vilka som är online på forumet?

Om du vill se vilka maskiner som är aktiva på nätverket är det bättre att snacka med din router. Att skicka en massa ICMP tror jag inte är någon bra idé. Dessutom brukar många mjukvarubrandväggar strunta i ping och du får då timeout även om maskinen är ansluten.
Jakob Persson - Grundare av phpBB Sverige - IT-konsult - http://www.jakob-persson.com
The Complete phpBB Template Design Guide
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

Kail skrev:Ville du inte se vilka som är online på forumet?
Tror inte det handlar om ett forum, utan om vilka maskiner som någon använder. Ping är väl inte de bästa sättet, men han ville ju ha det... :-)

/marcus
Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
sigun004
Gammal medlem
Gammal medlem
Inlägg: 78
Blev medlem: 2006-09-28 19:09
Svar: 0

Inlägg av sigun004 »

jag vet inte riktigt vad jag vill..
testar mig framåt...
sigun004
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 09:38
Svar: 0
Ort: Kokkola, Finland.

Inlägg av tumba25 »

marcus skrev:
tumba25 skrev: if($output == 'Begäran gjorde timeout.')
Håller inte, om svaret är på annat språk.
Jag vill bara påpeka att jag skrev det redan i det inlägget. :)

Men du har ju självklart rätt i att man kan få olika svar när man inte får svar. Det bästa är ju att kolla att $output börjar med "svar från" beroende på språk osv då vet man att datorn iaf svarat och sätta offline om man får något annat.

/J
Användarens profilbild
Kail
Administratör
Administratör
Inlägg: 2935
Blev medlem: 2003-06-03 13:53
Svar: 0
Ort: Linköping/Stockholm

Inlägg av Kail »

sigun004 skrev:
<?
$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...
}
Aldrig hört talas om foreach?
http://www.php.net/foreach
Jakob Persson - Grundare av phpBB Sverige - IT-konsult - http://www.jakob-persson.com
The Complete phpBB Template Design Guide
sigun004
Gammal medlem
Gammal medlem
Inlägg: 78
Blev medlem: 2006-09-28 19:09
Svar: 0

Inlägg av sigun004 »

nej
sigun004
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

Kail skrev:
sigun004 skrev:

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...
}
Aldrig hört talas om foreach?
http://www.php.net/foreach
Eftersom sigun004 tog den koden från mitt inlägg (2:a inlägget i tråden), så får jag väl svara:

Jo, det har jag... men det blev en for-sats den här gången. Kan bli så ibland. :-)

Med foreach skulle lösningen bli:

Kod: Markera allt

$ip_list = array('192.168.0.111', '192.168.0.101'); // Fyll på denna...
foreach ($ip_list as $ip) {
   $output = shell_exec('ping ' . $ip);
   // gör vad som behövs med $output...
}
/marcus
Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
Användarens profilbild
Kail
Administratör
Administratör
Inlägg: 2935
Blev medlem: 2003-06-03 13:53
Svar: 0
Ort: Linköping/Stockholm

Inlägg av Kail »

Ok. Det blir mindre kod med foreach, vilket brukar vara önskvärt. Sedan vilket som är effektivast vet jag inte.
Jakob Persson - Grundare av phpBB Sverige - IT-konsult - http://www.jakob-persson.com
The Complete phpBB Template Design Guide
Användarens profilbild
Marcus
Administratör
Administratör
Inlägg: 4321
Blev medlem: 2004-01-07 22:12
Svar: 0
Ort: Skövde

Inlägg av Marcus »

Ca. 10% snabbare med foreach. Ett test med 50 strängar i array, ger 6 ns snabbare körning. :-)

Men det är klart, ju större och ju fler arrayer som ska köras.... så sparar vi tid. :-)

Hittade en massa benchmarksidor om PHP och olika loopars prestanda.

/marcus

PS!
Wow... inlägg 1.000!!! Fest! ;)
DS!
Marcus Farrington - Administratör på phpBB Sverige
OBS! På förekommen anledning ges ingen support via PM.

Webb- & Drupalutvecklare på Webbyrå Grebban.
sigun004
Gammal medlem
Gammal medlem
Inlägg: 78
Blev medlem: 2006-09-28 19:09
Svar: 0

Inlägg av sigun004 »

foreach är snabbar får ni hjälpa mig med det för det har jag ingen koll på
sigun004
Användarens profilbild
tumba25
Hedersmedlem
Hedersmedlem
Inlägg: 2097
Blev medlem: 2007-04-18 09:38
Svar: 0
Ort: Kokkola, Finland.

Inlägg av tumba25 »

marcus skrev:

Kod: Markera allt

$ip_list = array('192.168.0.111', '192.168.0.101'); // Fyll på denna...
foreach ($ip_list as $ip) {
   $output = shell_exec('ping ' . $ip);
   // gör vad som behövs med $output...
}
Marcus skrev ju om den till att använda foreach istället.

/J
Skriv svar

Vilka är online

Användare som besöker denna kategori: 1 och 0 gäst