首頁  >  文章  >  後端開發  >  php中system和exec的差別是什麼

php中system和exec的差別是什麼

青灯夜游
青灯夜游原創
2020-09-01 10:49:594240瀏覽

php中system和exec的差異是:system執行外部程式並且顯示輸出,它可以輸出和傳回結果;exec執行外部程式不輸出結果而是傳回結果的最後一行。

php中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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn