PHP - Linux 上的 Ping exec 挂起脚本

标签 php linux exec ping freeze

我有一个简单的 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);

最佳答案

我会避免直接使用 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";
}

关于PHP - Linux 上的 Ping exec 挂起脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476274/

相关文章:

php - 将 HTML 属性从 onclick 事件传递给 jQuery 函数

适合许多开发人员的 php、zend 调试、svn 设置

PHP exec() 性能

elasticsearch - Elasticsearch 的未知设置 'hosts'

php - 从 php soap 客户端将 null/空字符串传递给 GUID 数据类型时出错

php - 在mysql查询ORDER BY中更改时间格式

linux - 即使我更改了 grub,也无法加载到启动到文本模式/控制台/命令行

c - 对文件系统的非阻塞访问

linux - 从多个进程追加到单个文件的 "Thread safety"?

c - 在 C 中使用 char 指针传递 int