2011-01-02 11 views
8

Desidero ottenere l'utilizzo della memoria di sistema (e anche le informazioni sullo spazio dell'HDD) in PHP. C'è un modo per fare senza invocare comandi usando le chiamate system?Come ottenere informazioni di sistema in PHP?

Nota: non sto cercando l'utilizzo della memoria dello script, ma l'utilizzo della memoria di sistema.

+0

Dubito che ci sia un modo per fare senza invocare comandi usando le chiamate di sistema. E dubito che ci sia bisogno di cercare un modo simile. –

+0

La chiamata 'system' è disabilitata su hosting condiviso. –

risposta

2

Su Linux, è possibile leggere /proc/meminfo per ottenere informazioni sulla memoria totale e disponibile del sistema (solo cat /proc/meminfo - si tratta di un semplice file di testo si può facilmente analizzare).

Non sono sicuro che tu possa ottenere informazioni sul filesystem da procfs, prova a guardare /proc/sys/fs per informazioni interessanti.

+0

grazie .. se phpsysinfo non è leggero, probabilmente userò questo metodo ... speravo che php avesse alcune funzioni di libreria, ma questo non dovrebbe essere troppo difficile. –

16

Stai cercando phpSysInfo:

phpSysInfo è uno script PHP che visualizza le informazioni su chi ospita a cui si accede. Sarà mostra le cose come:

  • Uptime
  • CPU
  • memoria
  • SCSI, IDE, PCI
  • Ethernet
  • Floppy
  • Informazioni Video

Check out the DEMO

+0

Credo che phpSysInfo esegua comandi esterni per ottenere alcune delle sue informazioni. – nimrodm

+1

@nimrodm: Mi capita di sapere (oscuramente) che per Linux, phpSysInfo legge '/ proc/meminfo' (come hai detto nella tua risposta). – thirtydot

+0

grazie .. questo sembra molto più di quello che voglio, ma è molto bello. –

3

Linfo fornisce le informazioni più importanti sullo stato del sistema. Hai solo bisogno di un sistema in cui sono installati /proc e /sys (la maggior parte dei sistemi unix-like, immagino).

Dal sito web: informazioni mostrate

  • Tipo CPU
  • RAM Uso dispositivi
  • PCI/USB
  • dischi rigidi
  • File system monta
  • I dispositivi di rete
  • Temp/Volt via hddtemp/mbmon
  • array RAID software (mediante mdadm o gmirror)
  • sistema di carico/numero di processi, filati
  • distribuzione Linux, se possibile
+1

Linfo è molto più facile da integrare come strumento di terze parti (ad esempio in framework) rispetto a phpSysInfo, mentre fornisce quasi le stesse informazioni. Entrambi funzionano su Windows e su piattaforme * nix. Entrambi supportano output alternativi via JSON/XML, ecc. PhpSysinfo ha 2.5 MB e molti link CSS/JS generati dinamicamente (quasi tutto è hardcoded) mentre LInfo ha 400 kB e definisce separatamente WEB_PATH quindi è più facile da integrare. phpSysInfo funziona bene se lo copi proprio sotto il tuo webroot, altrimenti rimani fermo per ore a fissare i collegamenti hard-coded :-(LInfo ha un output di interfaccia GUI un po 'più semplice. – lubosdz

9

Questo è messa fuori tutto di CPU, RAM, HDD e rete in formato JSON. (buono per gestirlo con jQuery)

<?php 
     //cpu stat 
     $prevVal = shell_exec("cat /proc/stat"); 
     $prevArr = explode(' ',trim($prevVal)); 
     $prevTotal = $prevArr[2] + $prevArr[3] + $prevArr[4] + $prevArr[5]; 
     $prevIdle = $prevArr[5]; 
     usleep(0.15 * 1000000); 
     $val = shell_exec("cat /proc/stat"); 
     $arr = explode(' ', trim($val)); 
     $total = $arr[2] + $arr[3] + $arr[4] + $arr[5]; 
     $idle = $arr[5]; 
     $intervalTotal = intval($total - $prevTotal); 
     $stat['cpu'] = intval(100 * (($intervalTotal - ($idle - $prevIdle))/$intervalTotal)); 
     $cpu_result = shell_exec("cat /proc/cpuinfo | grep model\ name"); 
     $stat['cpu_model'] = strstr($cpu_result, "\n", true); 
     $stat['cpu_model'] = str_replace("model name : ", "", $stat['cpu_model']); 
     //memory stat 
     $stat['mem_percent'] = round(shell_exec("free | grep Mem | awk '{print $3/$2 * 100.0}'"), 2); 
     $mem_result = shell_exec("cat /proc/meminfo | grep MemTotal"); 
     $stat['mem_total'] = round(preg_replace("#[^0-9]+(?:\.[0-9]*)?#", "", $mem_result)/1024/1024, 3); 
     $mem_result = shell_exec("cat /proc/meminfo | grep MemFree"); 
     $stat['mem_free'] = round(preg_replace("#[^0-9]+(?:\.[0-9]*)?#", "", $mem_result)/1024/1024, 3); 
     $stat['mem_used'] = $stat['mem_total'] - $stat['mem_free']; 
     //hdd stat 
     $stat['hdd_free'] = round(disk_free_space("/")/1024/1024/1024, 2); 
     $stat['hdd_total'] = round(disk_total_space("/")/1024/1024/ 1024, 2); 
     $stat['hdd_used'] = $stat['hdd_total'] - $stat['hdd_free']; 
     $stat['hdd_percent'] = round(sprintf('%.2f',($stat['hdd_used']/$stat['hdd_total']) * 100), 2); 
     //network stat 
     $stat['network_rx'] = round(trim(file_get_contents("/sys/class/net/eth0/statistics/rx_bytes"))/1024/ 1024/ 1024, 2); 
     $stat['network_tx'] = round(trim(file_get_contents("/sys/class/net/eth0/statistics/tx_bytes"))/1024/ 1024/ 1024, 2); 
     //output headers 
     header('Content-type: text/json'); 
     header('Content-type: application/json'); 
     //output data by json 
     echo  
     "{\"cpu\": " . $stat['cpu'] . ", \"cpu_model\": \"" . $stat['cpu_model'] . "\"" . //cpu stats 
     ", \"mem_percent\": " . $stat['mem_percent'] . ", \"mem_total\":" . $stat['mem_total'] . ", \"mem_used\":" . $stat['mem_used'] . ", \"mem_free\":" . $stat['mem_free'] . //mem stats 
     ", \"hdd_free\":" . $stat['hdd_free'] . ", \"hdd_total\":" . $stat['hdd_total'] . ", \"hdd_used\":" . $stat['hdd_used'] . ", \"hdd_percent\":" . $stat['hdd_percent'] . ", " . //hdd stats 
     "\"network_rx\":" . $stat['network_rx'] . ", \"network_tx\":" . $stat['network_tx'] . //network stats 
     "}"; 
     ?>