2011-01-02 19 views
8

Quiero obtener el uso de la memoria del sistema (y también la información del espacio HDD) en PHP. ¿Hay alguna manera de hacerlo sin invocar comandos usando llamadas system?¿Cómo obtener información del sistema en PHP?

Nota: No estoy buscando el uso de la memoria de secuencias de comandos, sino el uso de la memoria del sistema.

+0

Dudo que haya una manera de hacerlo sin invocar comandos usando llamadas al sistema. Y dudo que haya alguna necesidad de buscar esa forma. –

+0

llamada 'system' está deshabilitada en alojamiento compartido. –

Respuesta

2

En Linux, se puede leer /proc/meminfo para obtener información sobre la memoria total y disponible del sistema (solo cat /proc/meminfo - es un archivo de texto simple que se puede analizar fácilmente).

No estoy seguro de que pueda obtener información del sistema de archivos de procfs, intente buscar en /proc/sys/fs para obtener información de interés.

+0

gracias ... si phpsysinfo no es liviano, probablemente use este método ... esperaba que php tuviera algunas funciones de biblioteca pero esto no debería ser demasiado difícil. –

16

Usted está buscando phpSysInfo:

phpSysInfo es un script PHP que incluye información sobre la que se accede al host. Será muestra cosas como:

  • tiempo de actividad
  • CPU
  • memoria
  • SCSI, IDE, PCI
  • Ethernet
  • Floppy
  • Información del vídeo

Check out the DEMO

+0

Creo que phpSysInfo ejecuta comandos externos para obtener parte de su información. – nimrodm

+1

@nimrodm: Sé (oscuramente) que para Linux, phpSysInfo lee '/ proc/meminfo' (como lo indicó en su respuesta). – thirtydot

+0

gracias .. esto se ve mucho más de lo que quiero, pero es muy agradable. –

3

Linfo proporciona la información de estado del sistema más importante. Solo necesita un sistema donde /proc y /sys están montados (la mayoría del sistema unix, supongo).

Desde el sitio web: información mostrada

  • Tipo CPU
  • RAM Uso de dispositivos
  • PCI/USB
  • Los discos duros
  • sistema de archivos se monta
  • Los dispositivos de red
  • Temps/Voltajes vía hddtemp/mbmon
  • arrays RAID por software (ya sea por mdadm o gmirror) de carga
  • Sistema/número de procesos, hilos
  • distribución de Linux, si es posible
+1

Linfo es mucho más fácil de integrar como una herramienta de terceros (por ejemplo, en el marco) que phpSysInfo, mientras que proporciona casi la misma información. Ambos funcionan tanto en Windows como en plataformas * nix. Ambos soportan salidas alternativas a través de JSON/XML, etc. phpSysinfo tiene 2.5 MB y muchos enlaces CSS/JS generados dinámicamente (casi todo está codificado) mientras que LInfo tiene 400 kB y define por separado WEB_PATH por lo que es más fácil de integrar. phpSysInfo funciona bien si lo copias justo debajo de tu webroot, de lo contrario te quedas durante horas arreglando enlaces codificados :-(LInfo tiene una salida de interfaz GUI un poco más simple. – lubosdz

9

Se trata de poner todo sobre la CPU, RAM, disco duro y red en formato JSON. (bueno para manejarlo 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 
     "}"; 
     ?> 
Cuestiones relacionadas