Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP checking if server is alive

Tags:

php

I need to check if a group of servers, routers and switches is alive. I have been searching for something reliable that would work with IPs and ports for over an hour now, could anyone help?

Ended up using

function ping($addr, $port='') {
    if(empty($port)) {
        ob_start();
        system('ping -c1 -w1 '.$addr, $return);
        ob_end_clean();
        if($return == 0) {
            return true;
        } else {
            return false;
        }
    } else {
        $fp = fsockopen("udp://{$addr}", $port, $errno, $errstr);
        if (!$fp) {
            return false;
        } else {
            return true;
        }
    }
}
like image 695
Saulius Antanavicius Avatar asked Oct 17 '11 10:10

Saulius Antanavicius


1 Answers

Servers, routers and switches...the one commonality that all of them share is the ability to accept SNMP requests if an SNMP service is running. Sounds like what you are trying to do is implement a funny workaround to a monitoring system (nagios, etc....)

As per: http://php.net/manual/en/book.snmp.php

 <?php
 $endpoints = array('10.0.0.1','10.0.0.2','10.0.0.3','10.0.0.4','10.0.0.5');
 foreach ($endpoints as $endpoint) {
      $session = new SNMP(SNMP::VERSION_2c, $endpoint, 'boguscommunity');
      var_dump($session->getError());
      // do something with the $session->getError() if it exists else, endpoint is up
 }
 ?>

This will tell you if the endpoint is alive and the SNMP service is running. Specific to seeing if the port is available / open, you can use fsockopen():

http://php.net/manual/en/function.fsockopen.php

 <?php
 $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
 if (!$fp) {
      echo "ERROR: $errno - $errstr<br />\n";
 }
 ?>
like image 57
sdolgy Avatar answered Sep 29 '22 08:09

sdolgy