溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中system和exec存在著什么不同

發(fā)布時(shí)間:2020-09-04 14:19:38 來源:億速云 閱讀:161 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)php中system和exec存在著什么不同的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

區(qū)別:system()函數(shù)可以輸出和返回結(jié)果;第二個(gè)參數(shù)是可選的,用來得到命令執(zhí)行后的狀態(tài)碼。exec()不輸出結(jié)果,而是返回結(jié)果的最后一行;雖然它只返回命令結(jié)果的最后一行,但用第二個(gè)參數(shù)array可以得到完整的結(jié)果。

php中system和exec存在著什么不同

在PHP中調(diào)用外部命令,可以用exec 及 system來實(shí)現(xiàn)。那么它們之間有什么差異,下面本篇文章給大家介紹一下php中system和exec的區(qū)別。

一、exec  ---執(zhí)行外部程序

string exec ( string $command [, array &$output [, int &$return_var ]] )

$command:要執(zhí)行的shell 命令

$output:shell命令的輸出填充此數(shù)組,每行輸出填充數(shù)組中的一個(gè)元素。 請(qǐng)注意,如果數(shù)組中已經(jīng)包含了部分元素,exec() 函數(shù)會(huì)在數(shù)組末尾追加內(nèi)容。如果你不想在數(shù)組末尾進(jìn)行追加,請(qǐng)?jiān)趥魅?exec() 函數(shù)之前 對(duì)數(shù)組使用 unset() 函數(shù)進(jìn)行重置。

$return_var  命令執(zhí)行后的返回狀態(tài),命令執(zhí)行成功值是0

返回值:shell命令輸出的最后一行

ps:   2>&1  exec不成功,調(diào)試方案一個(gè)技巧就是使用管道命令, 使用 2>&1, 命令就會(huì)輸出shell執(zhí)行時(shí)的錯(cuò)誤到$output變量, 輸出該變量即可分析。

例子1

(1)代碼所在的index.php 文件的結(jié)構(gòu)

  php中system和exec存在著什么不同

(2)代碼

$out = [34];
$res = exec('ls 2>&1',$out,$return_status);
var_dump($res);
echo '------';
var_dump($out);
echo '------';
var_dump($return_status);

(3)執(zhí)行結(jié)果

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 ---執(zhí)行外部程序,并且顯示輸出

string system ( string $command [, int &$return_var ] )

$command  要執(zhí)行的命令

$return_var  命令執(zhí)行后的返回狀態(tài),值是0表示成功

返回結(jié)果:

  • 成功返回0,

  • 失?。畈淮嬖诘仍颍?  返回   非0值

1.示例代碼

$res = system('ls 2>&1',$return_status);var_dump($res);echo '------';var_dump($return_status);

2.輸出結(jié)果

php中system和exec存在著什么不同

總結(jié):

system()函數(shù)很其它語言中的差不多,它執(zhí)行給定的命令,輸出和返回結(jié)果。第二個(gè)參數(shù)是可選的,用來得到命令執(zhí)行后的狀態(tài)碼

exec ()函數(shù)與system()類似,也執(zhí)行給定的命令,但不輸出結(jié)果,而是返回結(jié)果的最后一行。雖然它只返回命令結(jié)果的最后一行,但用第二個(gè)參數(shù)array 可以得到完整的結(jié)果,方法是把結(jié)果逐行追加到array的結(jié)尾處。所以如果array不是空的,在調(diào)用之前最好用unset()最它清掉。只有指定了第二 個(gè)參數(shù)時(shí),才可以用第三個(gè)參數(shù),用來取得命令執(zhí)行的狀態(tài)碼。

感謝各位的閱讀!關(guān)于php中system和exec存在著什么不同就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI