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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
php实现微信发红包
Dec 05 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
解析strtr函数的效率问题
2013/06/26 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
解析jquery获取父窗口的元素
2013/06/26 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
js面向对象编程总结
2017/02/16 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
详解Python多线程下的list
2020/07/03 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
详解python中的异常捕获
2020/12/15 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
戒毒悔改检讨书
2014/09/21 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers