我想检查另一台机器是否通常用PHP响应。
大多数方法都是对目标计算机上运行的某些服务执行ping操作,但我想检查计算机是否一般在线。
我发现http://birk-jensen.dk/2010/09/php-ping/应该发送一个ICMP Ping包。问题是,某种方式需要root
才能执行socket_create(AF_INET, SOCK_RAW, 1)
。通过posix_seteuid(0)
的解决方法也不起作用,因为也需要提升权限。
任何让我运行ping
程序的函数在我的场景中都不可用。
那么如何使用php检查服务器是否在线?
答案 0 :(得分:1)
你总是可以使用Net_Ping来ping php http://pear.php.net/package/Net_Ping/redirected
答案 1 :(得分: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命令的一个奇特的接口