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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
oracle资料库函式库
Oct 09 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
轻松实现php文件上传功能
Feb 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
数据库的日期格式转换
2006/10/09 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python遍历字典方式就实例详解
2019/12/28 Python
如何通过python实现人脸识别验证
2020/01/17 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
django跳转页面传参的实现
2020/09/17 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
python实现经典排序算法的示例代码
2021/02/07 Python
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
业务总经理岗位职责
2014/02/03 职场文书
感恩寄语大全
2014/04/11 职场文书
股东合作协议书范本
2014/04/14 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
银行转正自我鉴定
2014/09/29 职场文书
2014年化验室工作总结
2014/11/21 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Python实现对齐打印 format函数的用法
2022/04/28 Python