2017-01-16 5 views
2

Сейчас у меня этот код, который работает в качестве тел, который работает, дайте мне знать, если пинг ПК:Необходимо отслеживать PC вниз раз с помощью PHP звона и отображения времени вниз D: HH: MM

<!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> 

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

+1

Используйте [ 'DateTime'] класс (http://php.net/manual/en/datetime.construct.php), и сохранить значение в сессии или базе данных. –

+0

Может ли это быть сохранено в файле как txt? –

+0

есть. текстовый файл можно рассматривать как еще одну форму базы данных. –

ответ

1

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

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

Исходный текст файл в этом примере назван 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> 
+0

Я, кажется, что-то делаю не так, он возвращает «server1 не работает с тех пор: неизвестно» все время. Прямо сейчас txt-файл пуст, который, я думаю, должен быть, если сервер встал, правильно? –

+0

это правильно. убедитесь, что на самом деле вы получаете код статуса «200», и если да, попробуйте включить отчет об ошибках или проверку своих журналов. –

+0

Я смущен кодом состояния 200, изначально я проверял пинг с exec («ping -c 2». $ Host, $ output, $ result); if ($ result == 0) это лучший метод? –

 Смежные вопросы

  • Нет связанных вопросов^_^