Необходимо отслеживать время простоя ПК с помощью PHP-пинга и отображать время простоя D:ЧЧ:ММ


В настоящее время у меня есть этот код, который работает как ph, который работает, чтобы сообщить мне, если ПК пингуют:

    <!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="30">
</head>
<body>

<h1>PC Test Ping Status</h1>

<?php
$host="10.161.10.98";
exec("ping -c 2 " . $host, $output, $result);
if ($result == 0)
echo "<p>p2 On-Line</p>";
else
echo "<p>p2 Off-Line !</p>";

$host="10.161.10.125";
exec("ping -c 2 " . $host, $output, $result);
if ($result == 0)
echo "<p>p3 On-Line</p>";
else
echo "<p>p3 Off-Line!</p>";

?> 


</body>
</html>

Я хочу отслеживать время с момента последнего успешного пинга, если компьютер не пингует.

 2
Author: Jozef Pietrzak, 2017-01-16

1 answers

Вот пример использования текстового файла в соответствии с запросом. Несколько заметок:

  1. Для простоты я предлагаю использовать CURL вместо exec, так как он должен быть намного быстрее и надежнее. Это проверяет наличие кода состояния HTTP "200", что означает, что он вернул действительный запрос.
  2. Вам нужно будет убедиться, что ваши текстовые файлы имеют соответствующие разрешения на чтение и запись.
  3. Я обновил этот ответ, чтобы также ответить на ваш другой вопрос.

В исходный текстовый файл в этом примере называется data.txt и содержит следующее:

p1|google.com|
p2|yahoo.com|
p2|amazon.com|

Следующий код будет циклически проходить через каждый сервер в списке и обновлять записи с последней датой, если он подключен.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="30">
</head>
<body>

<h1>PC Test Ping Status</h1>

<?php

function ping($addr) {
    $ch = curl_init($addr);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    //get response code
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($code === 200) {
        return true;
    }

    return false;
}

$file = 'data.txt';
$servers = array_filter(explode("\n", file_get_contents($file)));
foreach ($servers as $key => $server) {
    list($sname, $saddr, $suptime) = explode('|', $server);
    if (ping($saddr)) {
        echo "<p>$sname is online</p>";
        $date = new DateTime();
        $suptime = $date->format('Y-m-d H:i:s');
    } else {
        echo "<p>$sname is offline since: ";
        if (trim($suptime) !== '') {
            echo $suptime . '</p>';
        } else {
            echo 'unknown</p>';
        }
    }
    $servers[$key] = implode('|', array($sname, $saddr, $suptime)) . "\n";
}
file_put_contents($file, $servers);

?> 


</body>
</html>
 1
Author: mister martin, 2017-05-23 11:45:26