ГлавнаяПроектыФотографияМатериалыКарта узлаО себе(версия для печати)

Вывод времени непрерывной работы Windows XP (uptime) через web-интерфейс

ОС Windows не имеет команды вывода времени непрерывной работы системы. Но желаемого результата можно добиться, проанализировав вывод команды «net stats srv» или systeminfo. В данной подборке приведен пример решения задачи на языке PHP для первого варианта.

Команда «net stats srv» выводит дагностическую информацию о работе сервера Windows, в том числе дату старта системы, количество обращений к файлам и т.п. Для того, чтобы вычислить время непрерывной работы придется выделить из вывода этой команды строку, содержащую дату старта системы, и вычислить длительность интервала времени.

Если ядро версии Windows по умолчанию использует британский формат представления даты, то следующее регулярное выражение выделит в из результата работы команды подстроку, содержащую дату и время старта системы:

$r = shell_exec ( 'net stats srv' );
if ( eregi ( "([0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4} [0-9]{1,2}:[0-9]{1,2}) (AM|PM)", $r, $regs ) )
{
  $startUpTime = $regs[0];

Теперь необходимо вычслить длительность в секундах:

// ..
  $duration = time () - strtotime ( $startUpTime );
// ..
}

А в качестве завершения можно оформить результат, например, в виде: «92 дня, 8:55:43»:

function MorphNumbers ( $Number, $MeassureUnit )
{
  $NumbersMorph = array (
    "год"    => array ( "лет", "год", "года", "года", "года", "лет", "лет", "лет", "лет", "лет" ),
    "месяц"  => array ( "месяцев", "месяц", "месяца", "месяца", "месяца", "месяцев", "месяцев", "месяцев", "месяцев", "месяцев" ),
    "день"   => array ( "дней", "день", "дня", "дня", "дня", "дней", "дней", "дней", "дней", "дней" ),
    "час"    => array ( "часов", "час", "часа", "часа", "дня", "часов", "часов", "часов", "часов", "часов" ),
    "минута" => array ( "минут", "минута", "минуты", "минуты", "минуты", "минут", "минут", "минут", "минут", "минут" ),
  );
 
  $Number = intval ( $Number );
  if ( 10 < $Number && $Number < 20 )
    return $NumbersMorph[$MeassureUnit][0];
  return $NumbersMorph[$MeassureUnit][$Number % 10];
}
 
function LeadingZero ( $val )
{
  return ( $val < 10 ) ? '0' . $val : $val;
}
 
function ServerUpTime ()
{
  $r = shell_exec ( 'net stats srv' );
  if ( eregi ( "([0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4} [0-9]{1,2}:[0-9]{1,2}) (AM|PM)", $r, $regs ) )
  {
    $startUpTime = $regs[0];
    $duration = time () - strtotime ( $startUpTime );
    $sec = $duration % 60;
    $min = $duration / 60 % 60;
    $hrs = $duration / 3600 % 24;
    $dys = floor ( $duration / 3600 / 24 );
    $dys = 0 < $dys ? $dys . ' ' . MorphNumbers ( $dys, 'день' ) . ',' : '';
    return $dys. ' ' . $hrs . ':' . LeadingZero ( $min ) . ':' . LeadingZero ( $sec );
  }
  return '';
}

26 марта 2007—26 марта 2007
Максим Проскурня
Источники: Раздел справки «How to find Windows uptime?»
© 1997–2017 Axofiber