PHP 检查服务器是否处于活动状态

问题描述 投票:0回答:3

我需要检查一组服务器、路由器和交换机是否还活着。我一直在寻找可以与 IP 和端口一起使用的可靠的东西一个多小时了,有人可以帮忙吗?

最终使用了

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;
        }
    }
}
php
3个回答
9
投票

服务器、路由器和交换机...它们的一个共同点是,如果 SNMP 服务正在运行,则能够接受 SNMP 请求。听起来你想做的是对监控系统(nagios 等......)实施一个有趣的解决方法

按照: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
 }
 ?>

这将告诉您端点是否处于活动状态并且 SNMP 服务是否正在运行。具体查看端口是否可用/开放,可以使用

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";
 }
 ?>

0
投票
$ip = "123.456.789.0";
$ping = exec("ping -c 1 -s 64 -t 64 ".$ip);

var_dump($ping);

// and so forth.

-1
投票

更新:我们为什么不尝试连接到它?

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* check if server is alive */
if (mysqli_ping($link)) {
    printf ("Our connection is ok!\n");
} else {
    printf ("Error: %s\n", mysqli_error($link));
}

/* close connection */
mysqli_close($link);
?>
© www.soinside.com 2019 - 2024. All rights reserved.