這兩個函數都是執行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的區別
代碼如下 復制代碼 /**
'; 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函數,當然,如果命令執行結果只有一行返回信息,那麼使用哪個都無所謂