基于时间的PHP条件(如果最后一次ping是x分钟前,文本会改变颜色)

时间:2014-09-09 06:50:56

标签: php conditional-statements ping

我正在创建一个简单的界面来使用php界面远程监控某些设备。 我写了一个小脚本,ping到我的服务器并在日志中写入每个ping,并在php页面中显示最后一个:“Last ping 10:24 pm”

我希望能够根据上次设备ping的时间更改文本的颜色:例如:如果它少于5分钟前:文本为绿色。 10到5之间:橙色。超过10:红色。

我该怎么做?

提前致谢! :)

1 个答案:

答案 0 :(得分:1)

您使用此解析日期并为文本添加颜色。调整时间,看看差异:

$line = '[09/Sep/2014:15:32:52] (log) NameOfDevice';
preg_match_all('^\[(.*?)\]^', $line, $matches, PREG_PATTERN_ORDER);
$raw_date = $matches[1][0];

$log_date = DateTime::createFromFormat('d/M/Y:H:i:s', $raw_date);
$final_log_date = $log_date->format('Y-m-d H:i:s');


// handle ago
$now = new DateTime;
$ago = new DateTime($final_log_date);
$diff = $now->diff($ago);

$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;

$string = array('y' => 'year', 'm' => 'month', 'w' => 'week','d' => 'day', 'h' => 'hour','i' => 'minute', 's' => 'second',);
foreach ($string as $k => &$v) {
    if ($diff->$k) {
        $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
    } else {
        unset($string[$k]);
    }
}
$string = array_slice($string, 0, 1);

// handle color
$minute = round(abs($now->getTimestamp() - $ago->getTimestamp()) / 60,2);
$color = 'black';

if($minute <= 5) {
    $color = 'green';
} elseif ($minute > 5 && $minute <= 10) {
    $color = 'orange';
} else {
    $color = 'red';
}

$time = implode(', ', $string) . ' ago';

echo "<span style='color: $color;'>$time</span>";