Problem bierze się stąd, że w NND zwykły user (nobody) nie ma prawa odczytu pliku
/proc/net/dev i nie da się tego zmienić.
Obszedłem to w następujący sposób:
1. W pliku
../phpsysinfo/includes/os/class.Linux.inc.php
zamień funkcję
network() na taką:
function network () {
$results = array();
system("sudo /usr/local/sbin/read_ifstat");
if ($fd = fopen('/var/local/ifstat', 'r')) {
while ($buf = fgets($fd, 4096)) {
if (preg_match('/:/', $buf)) {
list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
$stats = preg_split('/\s+/', trim($stats_list));
$results[$dev_name] = array();
$results[$dev_name]['rx_bytes'] = $stats[0];
$results[$dev_name]['rx_packets'] = $stats[1];
$results[$dev_name]['rx_errs'] = $stats[2];
$results[$dev_name]['rx_drop'] = $stats[3];
$results[$dev_name]['rx_frame'] = $stats[5];
$results[$dev_name]['tx_bytes'] = $stats[8];
$results[$dev_name]['tx_packets'] = $stats[9];
$results[$dev_name]['tx_errs'] = $stats[10];
$results[$dev_name]['tx_drop'] = $stats[11];
$results[$dev_name]['tx_cols'] = $stats[13];
$results[$dev_name]['tx_carrier'] = $stats[14];
$results[$dev_name]['errs'] = $stats[2] + $stats[10];
$results[$dev_name]['drop'] = $stats[3] + $stats[11];
}
}
} else {
echo "'/proc/net/dev' not readable";
}
return $results;
}
2. Stwórz plik
/usr/local/sbin/read_ifstat:
#!/bin/bash
cat /proc/net/dev > /var/local/ifstat
3. Do
/etc/sudoers dodaj linijkę:
nobody ALL=NOPASSWD:/usr/local/sbin/read_ifstat
- i będzie śmigać
