Comment VBulletin obtient-il les informations système sans utiliser exec
? Existe-t-il d'autres informations que je peux obtenir sur le serveur sans exec? Je suis intéressé par:
Utiliser PHPSysInfo librairie
phpSysInfo est un script open source PHP qui affiche des informations sur l'hôte en cours d'accès. Il affichera des choses comme:
Il analyse directement /proc
et n'utilise pas exec
.
Une autre façon consiste à utiliser Linfo. C'est un très rapide multi-plateforme php qui décrit le serveur hôte de manière extrêmement détaillée, donnant des informations telles que l'utilisation de la mémoire vive, l'espace disque, les baies de disques, le matériel, les cartes réseau, le noyau, os, samba/cups/truecrypt statut, temps, disques, et bien plus encore.
C’est ce que j’utilise sur les serveurs Linux. Il utilise toujours exec
, mais d’autres questions pointent ici en double et il n’ya aucune [bonne] suggestion pour celles-ci. Il devrait fonctionne sur toutes les distributions, mais si ce n’est pas le cas, essayez de jouer avec $get_cores + 1
offset.
CPU en pourcentage de cœurs utilisés (5 min en moyenne):
$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) . '%';
RAM en pourcentage du total utilisé (temps réel):
$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) . '%';
RAM en Go utilisée (temps réel):
$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);
Voici ce qu'il y a dans le tableau $get_mem
si vous avez besoin de calculer d'autres facettes:
[0]=>row_title [1]=>mem_total [2]=>mem_used [3]=>mem_free [4]=>mem_shared [5]=>mem_buffers [6]=>mem_cached
Bonus, voici comment obtenir le temps de disponibilité:
$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());
après avoir cherché sur des forums et essayé de nombreuses méthodes, voici la meilleure précision:
$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);