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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
php文本转图片自动换行的方法
Mar 13 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
Jan 09 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
Prototype Array对象 学习
2009/07/19 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
javascript的this关键字详解
2019/05/20 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
简单介绍Python中的decode()方法的使用
2015/05/18 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python高级property属性用法实例分析
2019/11/19 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
教师岗位职责
2013/11/17 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
2014年保育员工作总结
2014/12/02 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
消防安全月活动总结
2015/05/08 职场文书
电影建党伟业观后感
2015/06/01 职场文书
辩护意见书
2015/06/04 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python