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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
PHP4.04简明安装
Oct 09 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
php中in_array函数用法分析
Nov 15 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php简单实现MVC
Feb 05 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
php无限级分类实现方法分析
Oct 19 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 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 动态添加记录
2009/03/10 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
jQuery设计思想
2017/03/07 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
跟老齐学Python之网站的结构
2014/10/24 Python
Python文件处理
2016/02/29 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python 处理图片像素点的实例
2019/01/08 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
广告设计应届生求职信
2014/03/01 职场文书
离婚协议书的范本
2015/01/27 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
销售合作意向书范本
2015/05/08 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python