注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

php编程读取LINUX系统状态的思想  

2013-12-12 22:27:43|  分类: 系统编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如下是收集的一些PHP代码段来读取系统的状态参数.实院上读取系统状态参数至少有两个步骤:首先利用PHP的工具去执行某个外部分命令得到返回值,再由php将其参数化,然后这些状态参数即可带入系统中使用了.


function get_used_status(){
  $fp = popen('top -b -n 2 | grep -E "^(Cpu|Mem|Tasks)"',"r");//获取某一时刻系统cpu和内存使用情况

     //注解:1)此段代码实际使用了top命令的功能,当然还可以直接读取系统的状态(一般在/proc/下)记录;
     //2)关于popen()函数的作用:函数说明
     popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。pclose() 函数关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状态。如果 shell 不能被执行,则 pclose() 返回的终止状态与 shell 已执行 exit 一样。
type 参数只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 "r" 则文件指针连接到 command 的标准输出;如果 type 是 "w" 则文件指针连接到 command 的标准输入。
command 参数是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用-c 标志,shell 将执行这个命令。
popen 的返回值是个标准 I/O 流,必须由 pclose 来终止。前面提到这个流是单向的。所以向这个流写内容相当于写入该命令的标准输入;命令的标准输出和调用 popen 的进程相同。与之相反的,从流中读数据相当于读取命令的标准输出;命令的标准输入和调用 popen 的进程相同。

  $rs = "";
  while(!feof($fp)){
   $rs .= fread($fp,1024);
  }
  pclose($fp);
  $sys_info = explode("\n",$rs);

  $tast_info = explode(",",$sys_info[3]);//进程 数组
  $cpu_info = explode(",",$sys_info[4]);  //CPU占有量  数组
  $mem_info = explode(",",$sys_info[5]); //内存占有量 数组

  //explode()是将字符串分割为数组的php函数.

  //正在运行的进程数
  $tast_running = trim(trim($tast_info[1],'running'));
  
    //CPU占有量
  $cpu_usage = trim(trim($cpu_info[0],'Cpu(s): '),'%us');  //百分比
  
  //内存占有量
  $mem_total = trim(trim($mem_info[0],'Mem: '),'k total'); 
  $mem_used = trim($mem_info[1],'k used');
  $mem_usage = round(100*intval($mem_used)/intval($mem_total),2);  //百分比
  

  /*硬盘使用率 begin*/
  $fp = popen('df -lh | grep -E "^(/)"',"r");
  $rs = fread($fp,1024);
  pclose($fp);
  $rs = preg_replace("/\s{2,}/",' ',$rs);  //把多个空格换成 “_”
  $hd = explode(" ",$rs);
  $hd_avail = trim($hd[3],'G'); //磁盘可用空间大小 单位G
  $hd_usage = trim($hd[4],'%'); //挂载点 百分比
  //print_r($hd);
  /*硬盘使用率 end*/ 

************************************
附:PHP explode() 函数使用实例

语法:

explode(separator,string,limit)
参数
描述
separator
必需。规定在哪里分割字符串。
string
必需。要分割的字符串。
limit
可选。规定所返回的数组元素的最大数目。

说明

       separator参数不能是空字符串。如果 separator为空字符串(""),explode() 将返回 FALSE。如果 separator所包含的值在 string中找不到,那么 explode() 将返回包含 string中单个元素的数组。
       如果设置了 limit参数,则返回的数组包含最多 limit个元素,而最后那个元素将包含 string的剩余部分。
       如果 limit参数是负数,则返回除了最后的 -limit个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。

实例
$file ="test.gif";
$extArray = explode( '.' ,$file ); //表示以点号(.)来分割字符串"test.gif"生成数组extArray;
$ext = end($extArray);
//end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。
echo $ext;
输出结果:
gif

  评论这张
 
阅读(179)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017