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 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
php minixml详解
Jul 19 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP 导出数据到淘宝助手CSV的方法分享
Feb 27 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
教你如何使用php session
Oct 28 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
Mar 18 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
Laravel-admin之修改操作日志的方法
Sep 30 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php 执行系统命令的方法
2009/07/07 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
Javascript的闭包详解
2014/12/26 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python 递归相关知识总结
2021/03/03 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
给医务人员表扬信
2014/01/12 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
如何写好建议书
2014/03/13 职场文书
廉洁使者实施方案
2014/03/29 职场文书