php中system和exec的差異是:system執行外部程式並且顯示輸出,它可以輸出和傳回結果;exec執行外部程式不輸出結果而是傳回結果的最後一行。
在PHP中呼叫外部指令,可以用exec 及 system來實作。那麼它們之間有什麼差異,以下這篇文章要跟大家介紹一下php中system和exec的差別。
一、exec ---執行外部程式
#string exec ( string $command [, array &$output [, int &$return_var ]] )
$command:要執行的shell 指令
#$output:shell指令的輸出填入此陣列,每行輸出填滿陣列中的一個元素。 請注意,如果陣列中已經包含了部分元素,exec() 函數會在陣列末端追加內容。如果你不想在陣列末端進行追加,請在傳入 exec() 函數之前 對陣列使用 unset() 函數進行重設。
$return_var 指令執行後的回傳狀態,指令執行成功值是0
傳回值:shell指令輸出的最後一行
ps: 2>&1 exec不成功,除錯方案一個技巧就是使用管道指令, 使用 2>&1, 指令就會輸出shell執行時的錯誤到$output變數, 輸出該變數即可分析。
範例1
#(1)程式碼所在的index.php 檔案的結構
#
(2 )代碼
$out = [34]; $res = exec('ls 2>&1',$out,$return_status); var_dump($res); echo '------'; var_dump($out); echo '------'; var_dump($return_status);
(3)執行結果
zhangxueqing:demo playcrab$ php ./1/index.php /Users/playcrab/www/demo/1/index.php:10: string(11) "webuploader" ------/Users/playcrab/www/demo/1/index.php:12: array(10) { [0] => int(34) [1] => string(1) "1" [2] => string(6) "1.html" [3] => string(5) "1.php" [4] => string(10) "client.php" [5] => string(14) "design-pattern" [6] => string(3) "img" [7] => string(17) "jquery.blockUI.js" [8] => string(10) "static.php" [9] => string(11) "webuploader" } ------/Users/playcrab/www/demo/1/index.php:14: int(0)
二、system ---執行外部程序,並且顯示輸出
string system ( string $command [, int &$return_var ] )
$command 要執行的指令
$return_var 指令執行後的回傳狀態,值為0表示成功
回傳結果:
成功回傳0,
失敗(指令不存在等原因) 回傳 非0值
1.範例程式碼
$res = system('ls 2>&1',$return_status);var_dump($res);echo '------';var_dump($return_status);
2.輸出結果
#總結:
system()函數很其它語言中的差不多,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到指令執行後的狀態碼
exec ()函數與system()類似,也執行給定的指令,但不輸出結果,而是回傳結果的最後一行。雖然它只會傳回指令結果的最後一行,但用第二個參數array 可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在呼叫之前最好用unset()最它清除。只有指定了第二 個參數時,才可以用第三個參數,用來取得指令執行的狀態碼。
推薦:《PHP影片教學》
以上是php中system和exec的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!