php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)


Posted in PHP onSeptember 07, 2012

php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。

在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。比如前二天笔者在批量处理.rar文件时exec就帮我了大忙了。

今天整理一下常用的调用系统函数发出来和大家分享经验。

注意:要想使用这二个函数php.ini中的安全模式必须关闭,要不然为了安全起见php是不让调用系统命令的。

先看一下php手册对这二个函数的解释:

exec --- 执行外部程式

语法 : string exec ( string command [, array &output [, int &return_var]] )

说明 :

exec( )执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。

如果有给予参数array,则指定的数组将会被命令所输出的每一行填满,注意 : 如果数组先前已经包含了一些元素的话,exec( )将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给exec( )之前呼叫unset( )。

如果有给予参数array和return_var,则传回执行的状态命令将会写到这个变量。

注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。

system --- 执行外部程式并且显示输出

语法 : string system ( string command [, int &return_var] )

说明 :

system( )执行给予的命令command,并且输出结果。如果有给予参数return_var,则执行命令的状态码将会写到这个变量。

注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。

如果PHP是运作成伺服器模组,在输出每一行后,system( )会试着自动地清除web伺服器的输出缓冲。

成功则传回命令的最后一行,失败则传回false。

如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。

这二个都是用来调用系统shell命令,

不同点:

exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败

systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1为失败

exec示例:

<?php 
$a = exec("dir",$out,$status); 
print_r($a); 
print_r($out); 
print_r($status); 
?>

system示例:
<?php 
$a = system("dir",$out); 
print_r($a); 
print_r($out); 
?>

system、exce、passthru区别
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
PHP 相关文章推荐
由php if 想到的些问题
Mar 22 PHP
php 301转向实现代码
Sep 18 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
php实现的简单多进程服务器类完整示例
Feb 01 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 #PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 #PHP
初步介绍PHP扩展开发经验分享
Sep 06 #PHP
php写的带缓存数据功能的mysqli类
Sep 06 #PHP
一个PHP并发访问实例代码
Sep 06 #PHP
PHP连接MongoDB示例代码
Sep 06 #PHP
谨慎使用PHP的引用原因分析
Sep 06 #PHP
You might like
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
简单介绍react redux的中间件的使用
2018/04/06 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
Python使用py2exe打包程序介绍
2014/11/20 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
keras之权重初始化方式
2020/05/21 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
python安装及变量名介绍详解
2020/12/12 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
副董事长岗位职责
2014/04/02 职场文书
班风学风建设方案
2014/05/06 职场文书
模范教师事迹材料
2014/12/16 职场文书
小学记事作文之200字
2019/08/06 职场文书
Django 实现jwt认证的示例
2021/04/30 Python