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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
PHP读取MySQL数据代码
Jun 05 PHP
php自动适应范围的分页代码
Aug 05 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
phpmyadmin 访问被拒绝的真实原因
Jun 15 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
PHP加密解密类实例代码
Jul 20 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 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来检测proxy
2006/10/09 PHP
PHP脚本的10个技巧(1)
2006/10/09 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP读取Excel类文件
2017/05/15 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
innerText 使用示例
2014/01/23 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
js文字横向滚动特效
2015/11/11 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Vue CL3 配置路径别名详解
2019/05/30 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python 从远程服务器下载东西的代码
2013/02/10 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python多进程实现文件下载传输功能
2018/07/28 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
Python必须了解的35个关键词
2020/07/16 Python
python使用列表的最佳方案
2020/08/12 Python
python re.match()用法相关示例
2021/01/27 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
小学生检讨书大全
2014/02/06 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
法人身份证明书
2014/10/08 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
Python内置数据类型中的集合详解
2022/03/18 Python