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

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

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

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

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

$r = shell_exec ( 'net stats srv' );
if ( preg_match( "/([0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4} [0-9]{1,2}:[0-9]{1,2}) (AM|PM)/i", $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 ( preg_match ( "/([0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4} [0-9]{1,2}:[0-9]{1,2}) (AM|PM)/i", $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–2024 Axofiber, axofiber.info