PHP脚本-获取服务器处理器

4

我已经进行了几个小时的研究,并找到了一种解决方案,但是我希望能够避免使用exec命令。

当前我有以下代码:

exec ("cat /proc/cpuinfo", $details);
$string= $details[4];

我希望它能够获取第一个处理器的类型,就像那个代码一样,但是不使用system或exec命令。

我更喜欢直接从/proc/cpuinfo中读取。


2
我猜你可以尝试使用 file_get_contents("/proc/cpuinfo"),但我不知道是否有效... 可能不会,但可以试一下。为什么不能使用 exec - Pekka
https://dev59.com/j2445IYBdhLWcg3wws8u - Marek Sebera
@Pekka exec() 必须谨慎使用,但_仅适用于用户生成的输入_。虽然 OP 可能会担心此事,但对于纯服务器端的东西,exec() 是可以接受的。 - Bojangles
我认为我可能可以使用类似以下代码来读取:$file = "/proc/loadavg"; $handle = fopen($file, "r"); 然而,我该如何只读取处理器部分呢? - Jacob
@Pekka 当有一个简单的替代方案时,exec非常慢。一个简单的基准测试表明,差异大约是50倍... - lonesomeday
5个回答

7
你所做的只是从文件中获取信息。这可以使用PHP原生函数完成。最简单的方法(也与您当前的解决方案最相似)是使用file
$file = file('/proc/cpuinfo');
$proc_details = $file[4];

不错的开端!!我得到了这个输出:model name : Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz。我该如何去掉“model name:”这部分? - Jacob
1
@Jacob 移除前13个字符:$proc_details = substr($proc_details, 13); - lonesomeday

1

只需将以下代码放置:

<pre>
<strong>Uptime:</strong>
<?php system("uptime"); ?>
<br />
<strong>System Information:</strong>
<?php system("uname -a"); ?>
<br />
<strong>Memory Usage (MB):</strong>
<?php system("free -m"); ?>
<br />
<strong>Disk Usage:</strong>
<?php system("df -h"); ?>
<br />
<strong>CPU Information:</strong>
<?php system("cat /proc/cpuinfo | grep \"model name\\|processor\""); ?>
</pre>

并且你将会得到类似这样的东西: enter image description here


0

0
  1. 出于安全原因,服务器管理员通常不会欢迎那种操作,所以他们可能会禁用一些函数,如exec/system/popen等。
  2. 使用/proc/cpuinfo并不适用于所有操作系统,例如FreeBSD默认情况下不会挂载procfs。

建议: 使用file_get_contents()函数是很好的选择,但您需要检查php_open_basedir限制和文件是否存在。


0
$cpuget = file('/proc/cpuinfo');
$cpu["name"]    =   str_replace("           ", " ",substr(str_replace("model name   : ", "", $cpuget[4]),0,-1));
$cpu["cores"]   =   substr(str_replace("cpu cores   : ", "", $cpuget[12]),0,-1);
$cpu["cache"]   =   substr(str_replace("cache size  : ", "", $cpuget[8]),0,-1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接