程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中exec與shell_exec函數區別

PHP中exec與shell_exec函數區別

編輯:關於PHP編程

這兩個函數都是執行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函數,當然,如果命令執行結果只有一行返回信息,那麼使用哪個都無所謂


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved