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 相关文章推荐
Zend 输出产生XML解析错误
Mar 03 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
php5.3 注意事项说明
Jul 01 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
PHP自毁程序(慎用)
Jul 09 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
PHP 断点续传实例详解
Nov 11 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
浅谈laravel-admin的sortable和orderby使用问题
Oct 03 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
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP实现微信退款功能
2018/10/02 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
js截取函数(indexOf,join等)
2010/09/01 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Django中create和save方法的不同
2019/08/13 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
如何卸载python插件
2020/07/08 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
大专生工程监理求职信
2013/10/04 职场文书
监理员的岗位职责
2013/11/13 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript