Команда «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 ''; }