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

2015-01-24信息快讯网

PHP作为一种服务器端的脚本语言,像编写简单,或者是复杂的动态网页这样的任务,它完全能够胜任。但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍

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() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
使用dump函数,给php加断点测试
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
深入file_get_contents函数抓取内容失败的原因分析
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
解析PHP留言本模块主要功能的函数说明(代码可实现)
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- PHP 自排序二叉树的深入解析
解析Ubuntu下crontab命令的用法
关于Zend Studio 配色方案插件的介绍
php常用Stream函数集介绍
解析php中eclipse 用空格替换 tab键
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
解析PHP中ob_start()函数的用法
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
关于更改Zend Studio/Eclipse代码风格主题的介绍
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
hadoop中一些常用的命令介绍
探讨:如何通过stats命令分析Memcached的内部状态
PHP设计模式之命令模式的深入解析
php cli模式学习(PHP命令行模式)
JSON在PHP中的应用介绍
巧用php中的array_filter()函数去掉多维空值的代码分享
比较discuz和ecshop的截取字符串函数php版
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
php实现快速排序法函数代码
php基础教程 php内置函数实例教程
php计算十二星座的函数代码
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
php中根据变量的类型 选择echo或dump
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
php在服务器执行exec命令失败的解决方法
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
php守护进程 加linux命令nohup实现任务每秒执行一次
php设计模式 Command(命令模式)
使用php shell命令合并图片的代码
©2014-2024 dbsqp.com