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経由でこれを行うことができます:

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

これは、(私のマシンは、RAMの2×2と2×4レンガを持つ上)に印刷されます:

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

あなたは簡単に

を使用して、これを合計することができます
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の例の詳細について

は、以下を参照してください。

あなたは可能性が高いだけでなく、.NET API.のように、他のWindowsの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; 
関連する問題