2011-08-30 25 views
9

Sử dụng PHP, tôi muốn nhận toàn bộ bộ nhớ khả dụng cho hệ thống (không chỉ bộ nhớ miễn phí hoặc bộ nhớ đã sử dụng).Nhận tổng bộ nhớ hệ thống có sẵn bằng PHP trên Windows

Trên Linux, nó khá thẳng về phía trước. Bạn có thể làm:

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

rồi phân tích tệp.

Có ai biết phương pháp tương đương cho Windows không? Tôi mở cho bất kỳ đề xuất nào.

Chỉnh sửa: Chúng tôi có một giải pháp (nhưng StackOverflow sẽ không cho phép tôi trả lời câu hỏi của riêng tôi):

exec('systeminfo', $output); 

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

Không phải là giải pháp thanh lịch nhất, và nó rất chậm, nhưng nó phù hợp với nhu cầu của tôi.

+0

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

+5

Side lưu ý: PHP có một built-in giới hạn bộ nhớ, vì vậy kích thước RAM của máy không nhất thiết phải RAM có sẵn cho tập lệnh của bạn (trừ khi bạn tắt giới hạn bộ nhớ) – Gordon

+0

systeminfo cực kỳ chậm - có lẽ không phải là ý tưởng hay nếu tập lệnh có tương tác người dùng – andig

Trả lời

5

Bạn có thể làm điều này thông qua exec:

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

này sẽ in (trên máy tính của tôi có 2x2 và 2x4 gạch RAM):

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

Bạn có thể dễ dàng tổng hợp này bằng cách sử dụng

echo array_sum($totalMemory); 

sau đó sẽ cấp 12884901888. Để chuyển thành Kilo-, Mega hoặc Gigabyte, hãy chia b y 1024 mỗi, ví dụ:

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

bổ sung dòng lệnh cách truy vấn tổng RAM có thể được tìm thấy trong


Một cách khác chương trình sẽ được thông qua 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 
); 

Để biết chi tiết về ví dụ COM này, vui lòng xem:

Bạn có thể lấy thông tin này từ các API Windows khác, giống như .NET API., cũng .


Ngoài ra còn có PECL mở rộng để làm điều này trên Windows:

Theo tài liệu, nó sẽ trả về một mảng chứa (trong số những người khác) một khóa có tên total_phys tương ứng với "Tổng số bộ nhớ vật lý."

Nhưng vì đây là phần mở rộng PECL, trước tiên bạn phải cài đặt nó trên máy của mình.

2

Đây là sự khác biệt nhỏ (và có thể phù hợp hơn cho SuperUser), nhưng khi nó xuất hiện trong dịch vụ cửa sổ gần đây, tôi sẽ cung cấp ở đây. Câu hỏi hỏi về có sẵn bộ nhớ, không phải tổng bộ nhớ vật lý.

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

echo $memory; 
Các vấn đề liên quan