PHP - Linux上的ping exec挂起脚本

时间:2016-05-27 06:26:39

标签: php linux exec ping hang

我有一个简单的PHP脚本设置来检查我的服务器的状态。它使用标准的ping命令,通过exec()运行。

  • 在Windows上,当服务器在线时,脚本运行正常 什么时候下来。
  • 在Linux上,该脚本在服务器联机时起作用,但在挂起时挂起 服务器已关闭。超时似乎对后者没有影响。

通过控制台使用相同的命令进行Ping操作正常并且超时正确。

原因是什么,以及如何解决?

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
  $exec_string = 'ping -n 1 -i 255 -w 2 ' . $host;
} else {
  $exec_string = 'ping -n -c 1 -t 255 -w 2 ' . $host;
}
exec($exec_string, $output, $return);

2 个答案:

答案 0 :(得分:2)

我会避免使用exec()直接ping。我使用这个脚本found here,你也可以设置端口和超时:

function ping($host, $port = 80, $timeout = 6) {
    $fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
    if (!$fsock) {
        return false;
    } else {
        return true;
    }
}

$host = 'www.example.com';

if(ping($host)) {
    echo "HOST UP";
} else {
    echo "HOST DOWN";
}

答案 1 :(得分:1)

我不确定为什么,但是从suPHP切换到fastCGI(两者都启用了suEXEC)似乎解决了这个问题,并且ping正常按预期超时。

如果有人对此有解释,我很乐意以评论或答案的形式知道。