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 相关文章推荐
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
解析php中memcache的应用
Jun 18 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php输出xml属性的方法
Mar 19 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
PHP中常用的魔术方法
Apr 28 PHP
php 可变函数使用小结
Jun 12 PHP
PHP里的$_GET数组介绍
Mar 22 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继承的一个应用
2011/09/06 PHP
PHP 代码规范小结
2012/03/08 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP生成条形图的方法
2014/12/10 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript 常用功能总结
2012/03/18 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
浅谈vue的踩坑路
2017/08/31 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
跟老齐学Python之Python文档
2014/10/10 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
校庆标语集锦
2014/06/25 职场文书
无罪辩护词范文
2015/05/21 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
前端JavaScript大管家 package.json
2021/11/02 Javascript
Python+Tkinter打造签名设计工具
2022/04/01 Python