PHP执行linux系统命令的常用函数使用说明


Posted in PHP onApril 27, 2010

system函数
说明:执行外部程序并显示输出资料。
语法:string system(string command, int [return_var]);
返回值: 字符串

详细介绍:
本函数就像是 C 语中的函数 system(),用来执行指令,并输出结果。若是 return_var 参数存在,则执行 command 之后的状态会填入 return_var 中。同样值得注意的是若需要处理用户输入的资料,而又要防止用户耍花招破解系统,则可以使用 EscapeShellCmd()。若 PHP 以模块式的执行,本函数会在每一行输出后自动更新 Web 服务器的输出缓冲暂存区。若需要完整的返回字符串,且不想经过不必要的其它中间的输出界面,可以使用 PassThru()。

实例代码:

< ?php 
$last_line = system('ls', $retval); 
echo 'Last line of the output: ' . $last_line; 
echo '<hr />Return value: ' . $retval; 
?>

exec函数
说明:执行外部程序。
语法:string exec(string command, string [array], int [return_var]);
返回值: 字符串

详细介绍:
本函数执行输入 command 的外部程序或外部指令。它的返回字符串只是外部程序执行后返回的最后一行;若需要完整的返回字符串,可以使用 PassThru() 这个函数。

要是参数 array 存在,command 会将 array 加到参数中执行,若不欲 array 被处理,可以在执行 exec() 之前呼叫 unset()。若是 return_var 跟 array 二个参数都存在,则执行 command 之后的状态会填入 return_var 中。

值得注意的是若需要处理使用者输入的资料,而又要防止使用者耍花招破解系统,则可以使用 EscapeShellCmd()。

实例代码:

< ?php 
echo exec('whoami'); 
?>

popen函数
说明:打开文件。
语法:int popen(string command, string mode);
返回值: 整数

详细介绍:
本函数执行指令开档,而该文件是用管道方式处理的文件。用本函数打开的文件只能是单向的 (只能读或只能写),而且一定要用 pclose() 关闭。在文件操作上可使用 fgets()、fgetss() 与 fputs()。若是开档发生错误,返回 false 值。

实例代码:

< ? 
$fp = popen("/bin/ls","r" ); 
?>

PHP监控linux服务器负载

在实际项目的应用中,我们由于各种条件的现实,利用PHP来实现服务器负载监控将是一种更为灵活的方式。

由于Web Server以及PHP的实现方式所限,我们在现实环境中很难利用PHP去调用一些Linux中需要root权限才能执行的程序,对此,我从网上找到另外一种方式来绕开这个限制。首先先写个c程序中转调用系统命令,然后用PHP去执行此c程序。

c程序

首先写个c文件,比如/usr/local/ismole/w.c

#include<stdio.h> 
#include<stdlib.h> 
#include<systypes.h> 
#include<unistd.h> int main() 
{ 
uid_t uid ,euid; 
//note 获得当前的uid 
uid = getuid(); 
//note 获得当前euid 
euid = geteuid(); 
//note 交换这两个id 
if(setreuid(euid, uid)) 
perror("setreuid"); 
//note 执行将要执行linux系统命令 
system("/usr/bin/w"); 
return0; 
}

编译该文件gcc -o w -Wall w.c,这时会在当前目录下生成程序w。改变此程序的属主chmod u+s ./w。
PHP执行

文件内容如下,放在web目录下,访问就会输出当前的服务器负载情况。

<?php 
/* 
More & Original PHP Framwork 
Copyright (c) 2007 - 2008 IsMole Inc. $Id: serverMonitor.php 408 2008-12-02 08:07:40Z kimi $ 
*/ 
//note key的验证过程 
if($key != $authkey) { 
// exit('key error); 
} 
$last_line = exec('/usr/local/ismole/w', $retval); 
$returnArray = explode("load average: ", $retval[0]); 
$returnString = $returnArray[1]; 
echo $returnString; 

 按照上面的实例,我们可以用PHP来做任何我们想执行的Linux系统命令,SVN更新,服务器监控,备份,恢复,日常维护等等。
PHP 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
学习php中的正则表达式
Aug 17 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
使用php-timeit估计php函数的执行时间
Sep 06 PHP
php计算年龄精准到年月日
Nov 17 PHP
开启PHP的伪静态模式
Dec 31 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP递归算法的简单实例
Feb 28 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 PHP
php 使用post,get的一种简洁方式
Apr 25 #PHP
Windows下安装Memcached的步骤说明
Apr 25 #PHP
PHP 文件缓存的性能测试
Apr 25 #PHP
PHP 中文处理技巧
Apr 25 #PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 #PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 #PHP
PHP CURL模拟GET及POST函数代码
Apr 25 #PHP
You might like
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
jquery层次选择器的介绍
2019/01/18 jQuery
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python实现购物车购物小程序
2018/04/18 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
python中如何设置代码自动提示
2020/07/15 Python
经济系大学生求职信
2013/10/01 职场文书
体育教师自荐信范文
2013/12/16 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
户外活动总结范文
2014/04/30 职场文书
经典禁毒标语
2014/06/16 职场文书
高中校园广播稿
2014/10/21 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
python实现局部图像放大
2021/11/17 Python