- system()
依據官方的說明,system 會自動更新在 shell 內的每一行輸出更新
The system() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.
<?php
system('ls -al', $out);
var_dump($out);
header('Content-type: application/json');
?>
#output
total 20
drwxr-xr-x 3 nginx nginx 4096 Jun 30 10:37 .
drwxr-xr-x. 11 root root 4096 Jun 26 00:42 ..
-rw-r--r-- 1 nginx nginx 816 Jun 30 10:36 cmd.php
-rw-r--r-- 1 nginx nginx 246 May 4 12:15 index.php
drwxr-xr-x 6 nginx nginx 4096 May 19 17:32 share
int(0)
- exec()
exec 將回傳的內容儲存在變數,並且為 array 的格式,適合用於處理參數
<?php
exec('ls -al', $out);
var_dump($out);
header('Content-type: application/json');
?>
#output
array(6) {
[0]=>
string(8) "total 20"
[1]=>
string(46) "drwxr-xr-x 3 nginx nginx 4096 Jun 30 10:45 ."
[2]=>
string(47) "drwxr-xr-x. 11 root root 4096 Jun 26 00:42 .."
[3]=>
string(52) "-rw-r--r-- 1 nginx nginx 811 Jun 30 10:45 cmd.php"
[4]=>
string(54) "-rw-r--r-- 1 nginx nginx 246 May 4 12:15 index.php"
[5]=>
string(50) "drwxr-xr-x 6 nginx nginx 4096 May 19 17:32 share"
}
- shell_exec()
shell_exec 將回傳的內容儲存在變數,並且為純文字內容
<?php
$out = shell_exec('ls -al');
var_dump($out);
header('Content-type: application/json');
?>
#output
string(263) "total 20
drwxr-xr-x 3 nginx nginx 4096 Jun 30 10:49 .
drwxr-xr-x. 11 root root 4096 Jun 26 00:42 ..
-rw-r--r-- 1 nginx nginx 817 Jun 30 10:49 cmd.php
-rw-r--r-- 1 nginx nginx 246 May 4 12:15 index.php
drwxr-xr-x 6 nginx nginx 4096 May 19 17:32 share
"
從範例看到幾種執行 shell 的差異,然後再選擇需要的 function 使用。
參考資料:
PHP: shell_exec - Manual
PHP: exec - Manual
PHP: system - Manual
PHP system()、exec()、shell_exec() 的 差異
Orignal From: PHP 執行 shell cmd 的方法 ; system()、exec()、shell_exec()
沒有留言:
張貼留言