有时候,别人需要知道一台服务器的磁盘使用率,但是不希望他拥有系统账号,只能通过浏览器查看,而且要达成如下目标:
- 使用Linux系统命令 df -h 列出当前系统磁盘使用率
- 保持格式不要所有输出都堆在一行,要能够自动换行
初尝试:
<?php
system("df -h");
?>
得到了输出,但是不能自动换行,所有输出都在一行,视觉效果极差。
一开始以为是PHP的system()可能有什么其他的参数选项可以解决这个问题,但后来发现似乎没有。
之后向着浏览器解析HTML本身的思路去查,果然有所收获,于是尝试在命令 df -h 的输出末尾增加一个HTML的换行符:<br />
于是变成了这样(需要注意system()中,双引号内如果有双引号,需要转义\):
<?php
system("df -Ph | awk '{print $0\"<br />\"}' ");
?>
问题果然解决了,显示正常:
Filesystem Size Used Avail Use% Mounted on
/dev/root 24G 5.3G 17G 24% /
devtmpfs 492M 0 492M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 7.6M 486M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/root 24G 5.3G 17G 24% /
devtmpfs 492M 0 492M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 7.6M 486M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
这样显示输出,虽然解决了自动换行的问题,但会看起来比较凌乱,鉴于可以利用HTML标签来显示输出内容,于是进一步改进,干脆把页面写成一个网页的样子:
这是改进之后的disk_used.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>系统磁盘使用率报告</title>
</head>
<style type="text/css">
table,th,td
{
border:2px solid black;
border-spacing:0;
border-collapse:collapse;
}
</style>
<body>
系统磁盘使用率报告:
<table border="4">
<?php
system("df -h | awk '{print \"<tr>\" \"<td>\" $1 \"</td>\" \"<td>\" $2 \"</td>\" \"<td>\" $3 \"</td>\" \"<td>\" $4 \"</td>\" \"<td>\" $5 \"</td>\" \"<td>\" $6 \"</td>\" \"</tr>\"}' ");?>
</table>
</body>
</html>
完