get server ram with php

后端 未结 9 1613
抹茶落季
抹茶落季 2020-12-05 00:19

Is there a way to know the avaliable ram in a server (linux distro) with php (widthout using linux commands)?

edit: sorry, the objective is to be aware of the ram av

相关标签:
9条回答
  • 2020-12-05 00:38

    Using /proc/meminfo and getting everything into an array is simple:

    <?php
    
    function getSystemMemInfo() 
    {       
        $data = explode("\n", file_get_contents("/proc/meminfo"));
        $meminfo = array();
        foreach ($data as $line) {
            list($key, $val) = explode(":", $line);
            $meminfo[$key] = trim($val);
        }
        return $meminfo;
    }
    
    ?>
    

    var_dump( getSystemMemInfo() );

    array(43) {
      ["MemTotal"]=>
      string(10) "2060700 kB"
      ["MemFree"]=>
      string(9) "277344 kB"
      ["Buffers"]=>
      string(8) "92200 kB"
      ["Cached"]=>
      string(9) "650544 kB"
      ["SwapCached"]=>
      string(8) "73592 kB"
      ["Active"]=>
      string(9) "995988 kB"
      ...
    
    0 讨论(0)
  • 2020-12-05 00:40

    shorter version

    preg_match('#MemFree:[\s\t]+([\d]+)\s+kB#', file_get_contents('/proc/meminfo'), $matches); 
    var_dump($matches[1]); // Free abount in KB
    
    0 讨论(0)
  • 2020-12-05 00:41

    Linux commands can be run using the exec function in PHP. This is efficient and will do the job(if objective is to get the memory).

    Try the following code:

    <?php
      exec("free -mtl", $output);
      print_r($output);
    ?>
    
    0 讨论(0)
  • 2020-12-05 00:45

    I don't remember having ever seen such a function -- its kind of out the scope of what PHP is made for, actually.

    Even if there was such a functionnality, it would probably be implemented in a way that would be specific to the underlying operating system, and wouldn't probably work on both Linux and windows (see sys_getloadavg for an example of that kind of thing)

    0 讨论(0)
  • 2020-12-05 00:51

    Small and tidy function to get all of its values associated to their keys.

    $contents = file_get_contents('/proc/meminfo');
    preg_match_all('/(\w+):\s+(\d+)\s/', $contents, $matches);
    $info = array_combine($matches[1], $matches[2]);
    
    // $info['MemTotal'] = "2047442"
    
    0 讨论(0)
  • 2020-12-05 00:53

    If you know this code will only be running under Linux, you can use the special /proc/meminfo file to get information about the system's virtual memory subsystem. The file has a form like this:

    MemTotal:       255908 kB
    MemFree:         69936 kB
    Buffers:         15812 kB
    Cached:         115124 kB
    SwapCached:          0 kB
    Active:          92700 kB
    Inactive:        63792 kB
    ...
    

    That first line, MemTotal: ..., contains the amount of physical RAM in the machine, minus the space reserved by the kernel for its own use. It's the best way I know of to get a simple report of the usable memory on a Linux system. You should be able to extract it via something like the following code:

    <?php
      $fh = fopen('/proc/meminfo','r');
      $mem = 0;
      while ($line = fgets($fh)) {
        $pieces = array();
        if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
          $mem = $pieces[1];
          break;
        }
      }
      fclose($fh);
    
      echo "$mem kB RAM found"; ?>
    

    (Please note: this code may require some tweaking for your environment.)

    0 讨论(0)
提交回复
热议问题