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写的简易聊天室代码
Jun 04 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
让python在hadoop上跑起来
2016/01/27 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
python:接口间数据传递与调用方法
2018/12/17 Python
Python中and和or如何使用
2020/05/28 Python
Python装饰器结合递归原理解析
2020/07/02 Python
用Python实现职工信息管理系统
2020/12/30 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
三八红旗手先进事迹材料
2014/05/13 职场文书
给校长的建议书300字
2014/05/16 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
合作协议书模板
2014/10/10 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
Django框架中表单的用法
2022/06/10 Python