5

我想检查另一台机器是否通常使用 PHP 响应。

大多数方法是ping目标机器上运行的一些服务,但我想检查机器是否在线。

我发现http://birk-jensen.dk/2010/09/php-ping/应该发送一个 ICMP Ping 包。问题是,以某种方式需要root执行socket_create(AF_INET, SOCK_RAW, 1). 解决方法 viaposix_seteuid(0)也不起作用,因为这也需要提升的权限。

任何可以让我运行ping 程序的功能在我的场景中也不可用。

那么如何使用php检查服务器是否在线?

4

2 回答 2

1

为此,您可能想尝试一下,这极不可能提供有意义的数据,但值得深思。

如果您打开一个 tcp 套接字到一个随机端口,而不是超时,它会立即关闭。然后机器“启动”,但这并不意味着更多。它可能处于内核恐慌状态。

超时并不意味着机器停机。只是它没有拒绝 tcp 握手,而是放弃了它。

您将无法获得任何有意义的计时数据,但是如果有问题的机器是打开还是关闭,您会给出更多有根据的猜测。

<?php
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect ( $sock , string $address,22 ) === true) {
switch(socket_last_error($sock)) {
    case 110:
    case 112:
    case 113:
       echo 'Machine may be down';
       break;
    case 111:
       echo 'Machine may be up';
       break;
    case 115:
       echo 'Machine is up';
       break;
    default:
       echo 'Machine in unknown state.';
       break;
}

您已经声明不能使用 ping 命令,因此 Net_Ping 将无法工作,因为它只是操作系统中 ping 命令的一个奇特接口

于 2012-12-23T00:05:56.860 回答
1

您始终可以使用 Net_Ping 从 php http://pear.php.net/package/Net_Ping/redirected ping

于 2012-12-22T20:42:09.997 回答