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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
php实现数组重复数字统计实例
Sep 30 PHP
php中错误处理操作实例分析
Aug 23 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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 删除cookie和浏览器重定向
2009/03/16 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
Python isinstance函数介绍
2015/04/14 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
实现向右循环移位
2014/07/31 面试题
预备党员入党思想汇报
2014/01/04 职场文书
市场营销求职信范文
2014/02/21 职场文书
2015年少先队活动总结
2015/03/25 职场文书
小学运动会前导词
2015/07/20 职场文书
golang中的空slice案例
2021/04/27 Golang