Avatar billede vladimirr Nybegynder
11. december 2001 - 19:09 Der er 26 kommentarer og
2 løsninger

Pinge IP\'er med php

Jeg vil godt have et eksempel på hvordan man kan pinge flere ipadresser i et phpscript...
Jeg kunne forestille mig noget med at den viser et billede hvis IPen er online, og et andet hvis den er offline...
Det må også gerne være sat op i en løkke som kører scriptet igen forfra hvert 30 sekund eller lign.
Det skal lige siges at der kommer omkring 200 ipadresser på hvis det virker, så det må gerne være lidt fikst.

//Anders
Avatar billede eflow Nybegynder
11. december 2001 - 19:19 #1
if (fsockopen($ip,$port)){
  echo \"Online\";
    } else {
  echo \"Offline\";
    }
Avatar billede eflow Nybegynder
11. december 2001 - 19:20 #2
du kan så smide det ind i en løkke så den henter ip\'en ud fra db osv......
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:24 #3
Kan det ikke laves på en lettere måde når det er 200 adresser der skal tjekkes ?
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:28 #4
evt med noget sql database...
Jeg kan jo oprette en database med adresserne i :)
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:28 #5
working on it... :)
Avatar billede eflow Nybegynder
11. december 2001 - 19:28 #6
Jeg tror ikke at det kan gøres lettere, men det er nu ikke så vært, du smider det bare in i en lykke:
<?
mysql_connect(\"localhost\",\"brugernavn\",\"password\");
mysql_select_db(\'database\');
$query = mysql_query(\"SELECT * FROM links where respekt = 1 ORDER by id Asc\");
 
while($r = mysql_fetch_array($query)) {
$id = $r[\"id\"];
$ip = $r[\"ip\"];
$port = $r[\"port\"];

if (fsockopen($ip,$port)){
  echo \"Online\";
    } else {
  echo \"Offline\";
    }
     
}
?>
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:29 #7
eflow >
Hvorfor ikke behandle en ping kommando istedet for at åbne en port? Hvad hvis porten er lukket?
Avatar billede eflow Nybegynder
11. december 2001 - 19:31 #8
ja, okey.....jeg kan da gdot smide ind at den skal pinge ip\'en istedet, 2 min....
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:31 #9
Det er en IP og ikke en port jeg skal bruge...
Da alle de porte der er åbne er i brug, og derfor vil blive forstyrret...
Og det skal de IKKE...
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:31 #10
eftersom det er switches / routere den skal pinges....
Avatar billede eflow Nybegynder
11. december 2001 - 19:39 #11
<?
function pingip($ip){

    if (strtoupper(substr(PHP_OS, 0, 3)) == \'WIN\'){
        $command = \'ping.exe -n 1\';
} else {
        $command = \'ping -c 1\';
}
        $host = escapeshellcmd($ip);
        $ping = popen($command.\' \'.$host, \'r\');
    while (!feof ($ping)) {
        $buffer = fgets($ping, 4096);
        ereg(\" time=[0-9]+\",$buffer,$pingtime);
        $value = substr($pingtime[0],1,strlen($pingtime[0]));
        $streng = $value[5].$value[6].$value[7].$value[8].\"&nbsp;\";
        flush();
        }

        if($streng == \"&nbsp;\"){
        $result = \"Offline\";
        }else{
        $result = \"Online\";
        }
echo $result;
pclose($ping);
}
mysql_connect(\"localhost\",\"brugernavn\",\"password\");
mysql_select_db(\'database\');
$query = mysql_query(\"SELECT * FROM links where respekt = 1 ORDER by id Asc\");
 
while($r = mysql_fetch_array($query)) {
$id = $r[\"id\"];
$ip = $r[\"ip\"];


echo pingip(\"212.10.58.193\")
     
}
?>
Avatar billede eflow Nybegynder
11. december 2001 - 19:40 #12
ups...fejl.....istedet for:
echo pingip(\"212.10.58.193\")
skal der stå:
echo pingip($ip)
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:45 #13
Hvad så når det er 200 adresser ?
Avatar billede eflow Nybegynder
11. december 2001 - 19:47 #14
det tager en smule tid....ser lige om man kan ligge en timeout på.....
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:47 #15
<?
mysql_connect(\"localhost\",
              \"user\",
              \"password\");
mysql_select_db(\"database\");
$result = mysql_query(\"SELECT hostname FROM servers ORDER BY id ASC\");
if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_array($result)) {
        $ping = `ping -c 1 $row[hostname]`;
        if (ereg(\"time=\", $ping)) print \"Ok<br>\";
        else print \"Nope :(<br>\";
    }
}
?>
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:48 #16
Simpelt, og det virker :)
Avatar billede eflow Nybegynder
11. december 2001 - 19:55 #17
logan-raarup>> og det kan både kører på windows og linux ? har nemlig kun mødt forslag der kan køre på begge os...
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:56 #18
eflow : Hvem kører windows på en server i dag ?
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:58 #19
eflow, man kører ikke windows på en server ;)
Avatar billede vladimirr Nybegynder
11. december 2001 - 19:59 #20
Jeg gør ihvertfald ikke :)
Avatar billede logan-raarup Nybegynder
11. december 2001 - 19:59 #21
eflow, men hvorfor lave et så langt script for at pinge nogle ip-adresser?
Avatar billede eflow Nybegynder
11. december 2001 - 20:01 #22
logan>> nogle gør......og af teksten vladimirr har skrevet ved jeg ikke om den ligger på windows eller *nix.
Og nu er det sådan at man nogle steder både brugere asp og php, og for at asp skal køre ordenligt skal det ligge på en windows.....
og det er nok ikke for sjov microsoft har lavet Windows 2k Server og Windows 2k Server adv.
Avatar billede logan-raarup Nybegynder
11. december 2001 - 20:04 #23
eflow, jeg vil give dig ret i det mht. asp. Men det her spm er i php-kategorien, hvis du kigger ordentlig efter, ikke asp. Og de fleste php-servere kører på linux.
Avatar billede eflow Nybegynder
11. december 2001 - 20:07 #24
logan>>

<snip dig>
de fleste php-servere kører på linux.
</snip dig>
de \"FLESTE\" php-servere kører på linux, ja...de fleste.....men for at hel gradere sig må man nu udvikle scripts til at køre på flest mulige systemer....
Avatar billede logan-raarup Nybegynder
11. december 2001 - 20:17 #25
Her er den så færdig:
<?
mysql_connect(\"dbserver\",
              \"username\",
              \"password\");
mysql_select_db(\"database\");
$result = mysql_query(\"SELECT hostname FROM servers ORDER BY id ASC\");
if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_array($result)) {
        print $row[hostname] . \" \";
        $ping = `ping -c 1 $row[hostname]`;
        if (ereg(\"time=\", $ping)) print \"Ok<br>\";
        else print \"Failed<br>\";
    }
}
?>

/logan :)
Avatar billede vladimirr Nybegynder
11. december 2001 - 20:21 #26
Mange tak for det
eflow: Det du har lavet virker så vidt jeg kan se, derfor de 25 point

logan: Dit virker, og er meget let at bruge på mange adresser, derfor satte jeg lige lidt flere point af, så du får 100

//Anders
Avatar billede eflow Nybegynder
11. december 2001 - 20:22 #27
vladimirr>> det var så lidt, men du behøvede ikke at give mig 25 point, de betyder intet for mig, bare jeg har point nok til at oprette spm...
Avatar billede vladimirr Nybegynder
11. december 2001 - 21:42 #28
eflow: Jeg har det lidt sådan at det er mest fair at give dig lidt for det, for der var jo ikke noget galt med dit svar.
Jeg valgte bare et andet...
Og point er ikke noget jeg mangler :=)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester