www.adminn.cn
站长正能量分享网!

PHP中exec与shell_exec函数区别

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

这两个函数都是执行Linux命令函数,不同的是获取返回结果不一样,exec只能获取最后一行数据,shell_execu则可以获取全部数据.

假如脚本路径下有如下文件:

-bash-4.1# ll 

总用量 12

-rw-rw-r–. 1 www web 133  7月 16 15:00 a.php

-rw-r–r–. 1 lee web  59  2月 29 17:05 b.php

-rw-r–r–. 1 lee web  81  3月  8 17:00 c.php

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

exec — 执行外部程式

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

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

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

exec例子,代码如下:

  1. <?php  
  2. /**  
  3.  * exec与shell_exec的区别  
  4.  * 琼台博客 phpfensi.com 
  5.  */ 
  6. $data = exec('/bin/ls -l');  
  7. echo '<pre>';  
  8. print_r($data);  
  9. echo '</pre>';  
  10. ?> 
  11. //执行结果 
  12. -rw-r–r–. 1 lee web  81 Mar  8 17:00 c.phpshell_exec例子 
  13. shell_exec() 

shell_exec() 命令行实际上仅是反撇号 (`) 操作符的变体,如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出,例如,清单 1 显示了如何使用反撇号在当前目录中获取每个文本(.txt)的单词计数.

在 shell_exec()中运行相同的命令,代码如下:

  1. <?php 
  2.  
  3. $results 
  4. =  
  5. shell_exec 
  6. wc -w *.txt 
  7. echo 
  8. $results 
  9. ?> 

获得的结果与从 shell 脚本得到的一样.

exec与shell_exec的区别,代码如下:

  1. <?php  
  2. /**  
  3.  *   
  4.  * 琼台博客  
  5.  */ 
  6. $data = shell_exec('/bin/ls -l');  
  7. echo '<pre>';  
  8. print_r($data);  
  9. echo '</pre>';  
  10. ?> 
  11. //执行结果 
  12.  total 12 
  13. -rw-rw-r–. 1 www web 139 Jul 16  2012 a.php 
  14. -rw-r–r–. 1 lee web  59 Feb 29 17:05 b.php 
  15. -rw-r–r–. 1 lee web  81 Mar  8 17:00 c.php 

所以平时使用exec函数的童鞋注意了,如果你需要获取全部返回信息,就应该使用shell_exec函数,当然,如果命令执行结果只有一行返回信息,那么使用哪个都无所谓.

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP中exec与shell_exec函数区别》
文章链接:https://www.adminn.cn/news/6475.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏