Как VBulletin получает системную информацию без использования exec
? Есть ли какая-либо другая информация, которую я могу получить о сервере без exec? Я заинтересован в:
Использовать библиотеку PHPSysInfo
phpSysInfo – это PHP-скрипт с открытым исходным кодом, который отображает информацию о хосте, к которому обращаются. В нем будут отображаться такие вещи, как:
Он непосредственно анализирует parses /proc
и не использует exec
.
Другой способ – использовать Linfo . Это очень быстрый кросс-платформенный php-скрипт, который очень подробно описывает хост-сервер, предоставляя информацию, такую как использование бара, дисковое пространство, массивы RAID, аппаратные средства, сетевые карты, ядро, os, samba / cups / truecrypt status, temps, диски и многое другое.
Это то, что я использую на серверах Linux. Он по-прежнему использует exec
, но другие вопросы здесь повторяются как дубликаты, и для них нет [хорошего] предложения. Он должен работать на каждом дистрибутиве, но если это не так, попробуйте возиться с $get_cores + 1
смещением.
CPU в процентах используемых сердечников (5 мин.):
$exec_loads = sys_getloadavg(); $exec_cores = trim(shell_exec("grep -P '^processor' /proc/cpuinfo|wc -l")); $cpu = round($exec_loads[1]/($exec_cores + 1)*100, 0) . '%';
ОЗУ в процентах от общего числа использованных (в реальном времени):
$exec_free = explode("\n", trim(shell_exec('free'))); $get_mem = preg_split("/[\s]+/", $exec_free[1]); $mem = round($get_mem[2]/$get_mem[1]*100, 0) . '%';
ОЗУ в ГБ используется (в реальном времени):
$exec_free = explode("\n", trim(shell_exec('free'))); $get_mem = preg_split("/[\s]+/", $exec_free[1]); $mem = number_format(round($get_mem[2]/1024/1024, 2), 2) . '/' . number_format(round($get_mem[1]/1024/1024, 2), 2);
Вот что находится в массиве $get_mem
если вам нужно рассчитать другие грани:
[0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached
Бонус, вот как получить время простоя:
$exec_uptime = preg_split("/[\s]+/", trim(shell_exec('uptime'))); $uptime = $exec_uptime[2] . ' Days';
<?php function get_server_load() { $load=array(); if (stristr(PHP_OS, 'win')) { $wmi = new COM("Winmgmts://"); $server = $wmi->execquery("SELECT LoadPercentage FROM Win32_Processor"); $cpu_num = 0; $load_total = 0; foreach($server as $cpu) { $cpu_num++; $load_total += $cpu->loadpercentage; } $load[]= round($load_total/$cpu_num); } else { $load = sys_getloadavg(); } return $load; } echo implode(' ',get_server_load());
после поиска на форумах и много методов, лучше всего это:
$stat1 = file('/proc/stat'); sleep(1); $stat2 = file('/proc/stat'); $info1 = explode(" ", preg_replace("!cpu +!", "", $stat1[0])); $info2 = explode(" ", preg_replace("!cpu +!", "", $stat2[0])); $dif = array(); $dif['user'] = $info2[0] - $info1[0]; $dif['nice'] = $info2[1] - $info1[1]; $dif['sys'] = $info2[2] - $info1[2]; $dif['idle'] = $info2[3] - $info1[3]; $total = array_sum($dif); $cpu = array(); foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 1); print_r($cpu);