Получите общую доступную системную память с PHP на Windows - PullRequest
10 голосов
/ 31 августа 2011

Используя PHP, я хотел бы получить общий объем памяти, доступной системе (не только свободную или использованную память).

В Linux это довольно просто. Вы можете сделать:

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

и затем проанализируйте файл.

Кто-нибудь знает об эквивалентном методе для Windows? Я открыт для любых предложений.

Редактировать: у нас есть решение (но StackOverflow не позволит мне ответить на мой собственный вопрос):

exec( 'systeminfo', $output );

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

Не самое элегантное решение, и оно очень медленное, но оно соответствует моим потребностям.

Ответы [ 2 ]

6 голосов
/ 18 сентября 2012

Вы можете сделать это через exec:

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

Будет напечатано (на моей машине 2x2 и 2x4 блока оперативной памяти):

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

Вы можете легко суммировать это, используя

echo array_sum($totalMemory);

, который затем даст 12884901888. Чтобы превратить это в кило-, мега- или гигабайты, разделите на 1024 каждый, например,

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

Дополнительные способы командной строки для запроса общего объема оперативной памяти можно найти в


Другой программный способ - через 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
);

Подробнее об этом примере COM см.

Вы, вероятно, можете получить эту информацию из других API Windows, например, .NET API. .


Существует также расширение PECL для этого в Windows:

Согласно документации, он должен возвращать массив, который содержит (среди прочего) ключ с именем total_phys, который соответствует « Объем всей физической памяти. »

Но так как это расширение PECL, вам сначала нужно установить его на свой компьютер.

2 голосов
/ 04 июля 2014

Это незначительное (и, возможно, более подходящее для SuperUser) отличие, но, поскольку оно появилось для меня в недавней службе Windows, я предоставлю это здесь.Вопрос задается о доступной памяти, а не об общей физической памяти.

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

echo $memory;
...