Используя PHP, я хотел бы получить доступную общую память для системы (а не только свободную или используемую память).
В Linux это довольно прямолинейно. Ты можешь сделать:
$memory = fopen('/proc/meminfo');
и затем проанализируйте файл.
Кто-нибудь знает об эквивалентном методе для Windows? Я открыт для любых предложений.
Edit: У нас есть решение (но StackOverflow не позволит мне ответить на собственный вопрос):
exec( 'systeminfo', $output ); foreach ( $output as $value ) { if ( preg_match( '|Total Physical Memory\:([^$]+)|', $value, $m ) ) { $memory = trim( $m[1] ); }
Не самое изящное решение, и это очень медленно, но мне это подходит.
Вы можете сделать это через exec
:
exec('wmic memorychip get capacity', $totalMemory); print_r($totalMemory);
Это будет печатать (на моей машине с 2×2 и 2×4 кирпичами ОЗУ):
Array ( [0] => Capacity [1] => 4294967296 [2] => 2147483648 [3] => 4294967296 [4] => 2147483648 [5] => )
Вы можете легко суммировать это, используя
echo array_sum($totalMemory);
который затем даст 12884901888. Чтобы превратить это в Kilo-, Mega- или Gigabytes, разделите по 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. , также.
Для Windows это также расширение PECL:
Согласно документации, он должен вернуть массив, содержащий (среди прочих) ключ с именем total_phys
который соответствует « сумме полной физической памяти ».
Но поскольку это расширение PECL, вам сначала нужно установить его на свой компьютер.
Это незначительное (и, возможно, более подходящее для SuperUser) различие, но поскольку оно появилось для меня в последней службе Windows, я предоставлю его здесь. Вопрос задает вопрос о доступной памяти, а не полной физической памяти.
exec('wmic OS get FreePhysicalMemory /Value 2>&1', $output, $return); $memory = substr($output[2],19); echo $memory;