2011-08-30 4 views
9

पर PHP के साथ कुल उपलब्ध सिस्टम मेमोरी प्राप्त करें PHP का उपयोग करके, मैं सिस्टम को उपलब्ध कुल मेमोरी (केवल मुफ्त या उपयोग की गई मेमोरी) प्राप्त नहीं करना चाहता हूं।विंडोज

लिनक्स पर यह काफी आगे है। आप कर सकते हैं:

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

और फिर फ़ाइल को पार्स।

क्या किसी को विंडोज के लिए समकक्ष विधि के बारे में पता है? मैं किसी भी सुझाव के लिए खुला हूँ।

संपादित करें:

exec('systeminfo', $output); 

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

नहीं सबसे सुरुचिपूर्ण समाधान, और यह बहुत धीमी है, लेकिन यह मेरी जरूरत सूट: हम एक समाधान है (लेकिन StackOverflow मुझे मेरे ही सवाल का जवाब नहीं दूँगा)।

+0

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

+5

साइड नोट: पीएचपी एक अंतर्निहित में स्मृति सीमा है, तो मशीन की रैम आकार जरूरी नहीं है रैम आपकी स्क्रिप्ट के लिए उपलब्ध है (जब तक आप मेमोरी सीमा को अक्षम नहीं करते) – 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 की 2x2 और 2x4 ईंटों वाले) प्रिंट होगा

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 
); 

इस कॉम उदाहरण पर जानकारी के लिए, कृपया देखें:

आप की संभावना अन्य Windows एपीआई से यह जानकारी प्राप्त कर सकते हैं, .NET API. की तरह है, साथ ही ।


वहाँ भी विंडोज पर यह करने के लिए PECL विस्तार है:

प्रलेखन के अनुसार, यह एक सरणी जिसमें नाम के एक प्रमुख लौटना चाहिए (दूसरों के बीच) total_phys जो "से संबंधित है, कुल भौतिक स्मृति की मात्रा"

लेकिन चूंकि यह एक पीईसीएल एक्सटेंशन है, तो आपको इसे पहले अपनी मशीन पर इंस्टॉल करना होगा।

2

यह एक मामूली (और संभवतः सुपरयूसर के लिए अधिक उपयुक्त) भेद है, लेकिन जैसा कि यह हाल ही में विंडोज़ सेवा में मेरे लिए आया है, मैं इसे यहां प्रदान करूंगा। प्रश्न मेमोरी के बारे में पूछता है, कुल भौतिक स्मृति नहीं।

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

echo $memory;