【问题标题】:How to get system info in PHP?如何在 PHP 中获取系统信息?
【发布时间】:2011-06-02 10:08:36
【问题描述】:

我想在 PHP 中获取系统内存使用情况(以及硬盘空间信息)。有没有办法不用system 调用命令?

注意:我不是在寻找脚本内存使用情况,而是系统内存使用情况。

【问题讨论】:

  • 我怀疑有没有办法不用系统调用来调用命令。我怀疑有没有必要寻找这样的方法。
  • system 呼叫在共享主机上被禁用。

标签: php system memory-management


【解决方案1】:

您正在寻找phpSysInfo:

phpSysInfo 是一个 PHP 脚本,用于显示有关正在访问的主机的信息。它将显示如下内容:

  • 正常运行时间
  • CPU
  • 内存
  • SCSI、IDE、PCI
  • 以太网
  • 软盘
  • 视频信息

Check out the DEMO

【讨论】:

  • 我相信 phpSysInfo 确实会执行外部命令来获取它的一些信息。
  • @nimrodm:我碰巧(模糊地)知道对于 Linux,phpSysInfo 读取 /proc/meminfo(正如您在回答中所述)。
  • 谢谢..这看起来比我想要的要多,但是非常好。
  • 非常好的东西,但不如第三方库。 Linfo 在这方面更好。
【解决方案2】:

这是以 JSON 格式输出有关 cpu、ram、hdd 和网络的所有内容。 (适合用 jQuery 处理)

<?php
        //cpu stat
        $prevVal = shell_exec("cat /proc/stat");
        $prevArr = explode(' ',trim($prevVal));
        $prevTotal = $prevArr[2] + $prevArr[3] + $prevArr[4] + $prevArr[5];
        $prevIdle = $prevArr[5];
        usleep(0.15 * 1000000);
        $val = shell_exec("cat /proc/stat");
        $arr = explode(' ', trim($val));
        $total = $arr[2] + $arr[3] + $arr[4] + $arr[5];
        $idle = $arr[5];
        $intervalTotal = intval($total - $prevTotal);
        $stat['cpu'] =  intval(100 * (($intervalTotal - ($idle - $prevIdle)) / $intervalTotal));
        $cpu_result = shell_exec("cat /proc/cpuinfo | grep model\ name");
        $stat['cpu_model'] = strstr($cpu_result, "\n", true);
        $stat['cpu_model'] = str_replace("model name    : ", "", $stat['cpu_model']);
        //memory stat
        $stat['mem_percent'] = round(shell_exec("free | grep Mem | awk '{print $3/$2 * 100.0}'"), 2);
        $mem_result = shell_exec("cat /proc/meminfo | grep MemTotal");
        $stat['mem_total'] = round(preg_replace("#[^0-9]+(?:\.[0-9]*)?#", "", $mem_result) / 1024 / 1024, 3);
        $mem_result = shell_exec("cat /proc/meminfo | grep MemFree");
        $stat['mem_free'] = round(preg_replace("#[^0-9]+(?:\.[0-9]*)?#", "", $mem_result) / 1024 / 1024, 3);
        $stat['mem_used'] = $stat['mem_total'] - $stat['mem_free'];
        //hdd stat
        $stat['hdd_free'] = round(disk_free_space("/") / 1024 / 1024 / 1024, 2);
        $stat['hdd_total'] = round(disk_total_space("/") / 1024 / 1024/ 1024, 2);
        $stat['hdd_used'] = $stat['hdd_total'] - $stat['hdd_free'];
        $stat['hdd_percent'] = round(sprintf('%.2f',($stat['hdd_used'] / $stat['hdd_total']) * 100), 2);
        //network stat
        $stat['network_rx'] = round(trim(file_get_contents("/sys/class/net/eth0/statistics/rx_bytes")) / 1024/ 1024/ 1024, 2);
        $stat['network_tx'] = round(trim(file_get_contents("/sys/class/net/eth0/statistics/tx_bytes")) / 1024/ 1024/ 1024, 2);
        //output headers
        header('Content-type: text/json');
        header('Content-type: application/json');
        //output data by json
        echo    
        "{\"cpu\": " . $stat['cpu'] . ", \"cpu_model\": \"" . $stat['cpu_model'] . "\"" . //cpu stats
        ", \"mem_percent\": " . $stat['mem_percent'] . ", \"mem_total\":" . $stat['mem_total'] . ", \"mem_used\":" . $stat['mem_used'] . ", \"mem_free\":" . $stat['mem_free'] . //mem stats
        ", \"hdd_free\":" . $stat['hdd_free'] . ", \"hdd_total\":" . $stat['hdd_total'] . ", \"hdd_used\":" . $stat['hdd_used'] . ", \"hdd_percent\":" . $stat['hdd_percent'] . ", " . //hdd stats
        "\"network_rx\":" . $stat['network_rx'] . ", \"network_tx\":" . $stat['network_tx'] . //network stats
        "}";
        ?>

【讨论】:

  • 对于新读者:从很久以前(几年)开始,PHP bulitin 模块中就有一个叫做json_encode 的东西。如果 CPU 型号等包含 " 或 ``,则上面的代码很危险。
【解决方案3】:

Linfo 提供最重要的系统状态信息。您只需要一个安装了/proc/sys 的系统(我猜是最类似unix 的系统)。

来自网站: 显示信息

  • CPU 类型
  • 内存使用情况
  • PCI/USB 设备
  • 硬盘驱动器
  • 文件系统挂载
  • 网络设备
  • 通过 hddtemp/mbmon 的温度/电压
  • 软件 RAID 阵列(通过 mdadm 或 gmirror)
  • 系统负载/进程数、线程数
  • Linux 发行版,如果可能的话

【讨论】:

    【解决方案4】:

    在 Linux 上,您可以阅读 /proc/meminfo 以获取有关总和可用系统内存的信息(只需 cat /proc/meminfo -- 这是一个您可以轻松解析的简单文本文件)。

    我不确定您是否可以从 procfs 获取文件系统信息,请尝试查看 /proc/sys/fs 以获取有趣的信息。

    【讨论】:

    • 谢谢..如果phpsysinfo不是轻量级的,我可能会使用这种方法...我希望php有一些库函数,但这应该不会太难。
    猜你喜欢
    • 2011-03-28
    • 2016-03-12
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2018-06-07
    • 2014-06-12
    • 2012-05-07
    • 2011-03-07
    相关资源
    最近更新 更多