2011-08-30 6 views
9

PHP를 사용하여 무료 또는 사용 된 메모리가 아닌 시스템에서 사용할 수있는 전체 메모리를 얻고 싶습니다.Windows에서 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]); 
} 

아니 가장 우아한 해결책을, 그리고 그것은 매우 느린,하지만 내 요구에 맞는.

+0

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

+5

사이드 참고 : PHP는이 메모리 제한 내장, 그래서 컴퓨터의 RAM 크기는 필요하지 않다 스크립트에서 사용할 수있는 RAM (메모리 제한을 해제하지 않은 경우) – Gordon

+0

systeminfo의 속도가 매우 느립니다. 스크립트에 사용자 상호 작용이있는 경우에는 좋지 않을 수 있습니다. – andig

답변

5

당신은 exec를 통해이 작업을 수행 할 수 있습니다

를 사용하여

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

당신은 쉽게 합계 수

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

이 (RAM의 2 × 및 2 × 4 벽돌을 가진 내 컴퓨터에서) 인쇄됩니다

echo array_sum($totalMemory); 

그러면 12884901888이됩니다.이를 Kilo-, Mega- 또는 Gigabytes로 바꾸려면 b y 1024. 총 RAM 쿼리의

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 예제에 대한 자세한 내용은 6,

은 참조하십시오

당신은 가능성이 다른 Windows API를에서이 정보를 얻을 수 있으며, .NET API.처럼뿐만 아니라, .


Windows에서이 작업을 수행 PECL 확장도 있습니다 :

이 문서에 따르면, (다른 사람의 사이에서)라는 이름의 키를 포함하는 배열을 반환한다 total_phys은 "총 물리적 메모리의 양"

에 해당합니다.

하지만 PECL 확장이므로 먼저 컴퓨터에 설치해야합니다.

2

이것은 미성년자 (및 수퍼 유저에게 더 적합 할 수 있음) 구별이지만 최신 Windows 서비스에서 나에게 제기되었으므로 여기서 알려 드리겠습니다. 질문에 대한 대답은 이며 실제 메모리가 아닌입니다.

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

echo $memory; 
관련 문제