Heim  >  Artikel  >  php教程  >  PHP中exec与shell_exec函数区别

PHP中exec与shell_exec函数区别

WBOY
WBOYOriginal
2016-06-13 11:19:351646Durchsuche

这两个函数都是执行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例子

 代码如下 复制代码

/**
 * exec与shell_exec的区别
 * 琼台博客
 */
$data = exec('/bin/ls -l');
echo '

	'; 
print_r($data); 
echo '
';
?>

 

执行结果

 
-rw-r--r--. 1 lee web  81 Mar  8 17:00 c.phpshell_exec例子

shell_exec()

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


在 shell_exec()
中运行相同的命令

 代码如下 复制代码


$results
=
shell_exec
(
'
wc -w *.txt
'
)
;

echo

$results
;

?>

在图 1 中可以看到,获得的结果与从 shell 脚本得到的一样

exec与shell_exec的区别

 

 代码如下 复制代码
/**
 * 
 * 琼台博客
 */
$data = shell_exec('/bin/ls -l');
echo '
	'; 
print_r($data); 
echo '
';
?>

执行结果

 total 12
-rw-rw-r--. 1 www web 139 Jul 16  2012 a.php
-rw-r--r--. 1 lee web  59 Feb 29 17:05 b.php
-rw-r--r--. 1 lee web  81 Mar  8 17:00 c.php所以平时使用exec函数的童鞋注意了,如果你需要获取全部返回信息,就应该使用shell_exec函数,当然,如果命令执行结果只有一行返回信息,那么使用哪个都无所谓


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn