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扩展函数
Oct 09 PHP
php生成略缩图代码
Jul 16 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php反射应用示例
Feb 25 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php全角字符转换为半角函数
2014/02/07 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现360的字符显示界面
2014/02/21 Python
Python和Go语言的区别总结
2019/02/20 Python
在pycharm中实现删除bookmark
2020/02/14 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
日语专业推荐信
2013/11/12 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
python实现黄金分割法的示例代码
2021/04/28 Python
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
box-shadow单边阴影的实现
2023/05/21 HTML / CSS