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 相关文章推荐
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
php无序树实现方法
Jul 28 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
用Python配平化学方程式的方法
2019/07/20 Python
django和vue实现数据交互的方法
2019/08/21 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
django 模型中的计算字段实例
2020/05/19 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
介绍一下木马病毒的种类
2015/07/26 面试题
优秀少先队辅导员事迹材料
2014/12/24 职场文书
爱国电影观后感
2015/06/19 职场文书
学生会招新宣传语
2015/07/13 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
初一语文教学反思
2016/03/03 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书