這兩個函數都是執行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例子,代碼如下:
- <?php
- /**
- * exec與shell_exec的區別
- * 瓊臺博客 Vevb.com
- */
- $data = exec('/bin/ls -l');
- echo '<pre>';
- print_r($data);
- echo '</pre>';
- ?>
- //執行結果
- -rw-r--r--. 1 lee web 81 Mar 8 17:00 c.phpshell_exec例子
- shell_exec()
shell_exec() 命令行實際上僅是反撇號 (`) 操作符的變體,如果您編寫過 shell 或 Perl 腳本,您就知道可以在反撇號操作符內部捕捉其他命令的輸出,例如,清單 1 顯示了如何使用反撇號在當前目錄中獲取每個文本(.txt)的單詞計數.
在 shell_exec()中運行相同的命令,代碼如下:
- <?php
- $results
- =
- shell_exec
- (
- '
- wc -w *.txt
- '
- )
- ;
- echo
- $results
- ;
- ?>
獲得的結果與從 shell 腳本得到的一樣.
exec與shell_exec的區別,代碼如下:
- <?php
- /**
- *
- * 瓊臺博客
- */
- $data = shell_exec('/bin/ls -l');
- echo '<pre>';
- print_r($data);
- echo '</pre>';
- ?>
- //執行結果
- 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函數,當然,如果命令執行結果只有一行返回信息,那么使用哪個都無所謂.
新聞熱點
疑難解答