2011-08-30 18 views
9

Utilizando PHP, me gustaría obtener la memoria total disponible para el sistema (no solo la memoria gratuita o usada).Obtenga la memoria del sistema total disponible con PHP en Windows

En Linux es bastante sencillo. Que puede hacer:

$memory = fopen('/proc/meminfo');

y luego analizar el archivo.

¿Alguien conoce un método equivalente para Windows? Estoy abierto a cualquier sugerencia.

Editar: Tenemos una solución (pero stackoverflow no me permite responder a mi propia pregunta):

exec('systeminfo', $output); 

foreach ($output as $value) { 
    if (preg_match('|Total Physical Memory\:([^$]+)|', $value, $m)) { 
     $memory = trim($m[1]); 
} 

No es la solución más elegante, y es muy lento, pero se adapta a mi necesidad.

+0

http://stackoverflow.com/questions/1455379/get-server-ram-with-php – moonwave99

+5

Nota al margen: PHP tiene incorporado un límite de memoria, por lo que el tamaño de la RAM de la máquina no es necesariamente la memoria RAM disponible para su script (a menos que deshabilite el límite de memoria) – Gordon

+0

systeminfo es terriblemente lento, probablemente no es una buena idea si el script tiene interacción con el usuario – andig

Respuesta

5

Puede hacerlo a través de exec:

exec('wmic memorychip get capacity', $totalMemory); 
print_r($totalMemory); 

Esto imprimirá (en mi máquina que tiene 2x2 y 2x4 ladrillos de RAM):

Array 
(
    [0] => Capacity 
    [1] => 4294967296 
    [2] => 2147483648 
    [3] => 4294967296 
    [4] => 2147483648 
    [5] => 
) 

puede sumar fácilmente mediante el uso de

echo array_sum($totalMemory); 

que luego dará 12884901888. Para convertir esto en Kilo-, Mega- o Gigabytes, divida b y 1024 cada uno, p.

echo array_sum($totalMemory)/1024/1024/1024; // GB 

formas de línea de comandos adicionales de consulta RAM total puede encontrarse en


Otra forma programática sería a través de COM:

// connect to WMI 
$wmi = new COM('WinMgmts:root/cimv2'); 

// Query this Computer for Total Physical RAM 
$res = $wmi->ExecQuery('Select TotalPhysicalMemory from Win32_ComputerSystem'); 

// Fetch the first item from the results 
$system = $res->ItemIndex(0); 

// print the Total Physical RAM 
printf(
    'Physical Memory: %d MB', 
    $system->TotalPhysicalMemory/1024 /1024 
); 

Para más detalles sobre este ejemplo COM, por favor ver:

probable que usted puede obtener esta información de otras API de Windows, como el .NET API., así .


También hay extensión PECL para hacer esto en Windows:

Según la documentación, que debe devolver una matriz que contiene (entre otros) una clave denominada total_phys que corresponde a "La cantidad de memoria física total."

Pero como es una extensión PECL, primero debe instalarla en su máquina.

2

Esta es una distinción menor (y posiblemente más adecuada para SuperUser), pero como se me ocurrió en un servicio reciente de Windows, la proporcionaré aquí. La pregunta se refiere a memoria disponible, no a la memoria física total.

exec('wmic OS get FreePhysicalMemory /Value 2>&1', $output, $return); 
$memory = substr($output[2],19); 

echo $memory; 
Cuestiones relacionadas