您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關php中system和exec存在著什么不同的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
區別:system()函數可以輸出和返回結果;第二個參數是可選的,用來得到命令執行后的狀態碼。exec()不輸出結果,而是返回結果的最后一行;雖然它只返回命令結果的最后一行,但用第二個參數array可以得到完整的結果。
在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中system和exec存在著什么不同就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。