php外部系统命令执行函数
總結一下php中常用的執行函數,一篇水文
一、system()函數
(PHP 4, PHP 5, PHP 7)
-
介紹:執行外部程序,并且顯示輸出
-
說明
同 C 版本的 system() 函數一樣,本函數執行 command 參數所指定的命令,并且輸出執行結果。
如果 PHP 運行在服務器模塊中, system() 函數還會嘗試在每行輸出完畢之后,自動刷新 web 服務器的輸出緩存。
該函數執行后,直接在終端窗口打印命令執行的結果
如果要獲取一個命令未經任何處理的原始輸出,請使用 passthru() 函數。
- 參數
command
要執行的命令。
return_var
如果提供 return_var 參數,則外部命令執行后的返回狀態將會被設置到此變量中。 - 返回值
成功則返回命令輸出的最后一行,失敗則返回 FALSE - 例:
二、passthru()函數
(PHP 4, PHP 5, PHP 7)
-
介紹:執行外部程序并且顯示原始輸出
-
說明
同 exec() 函數類似, passthru() 函數也是用來執行外部命令(command)的。當所執行的 Unix 命令輸出二進制數據,并且需要直接傳送到瀏覽器的時候,需要用此函數來替代 exec() 或 system() 函數。常用來執行諸如 pbmplus 之類的可以直接輸出圖像流的命令。通過設置 Content-type 為 image/gif,然后調用 pbmplus 程序輸出 gif 文件,就可以從 PHP 腳本中直接輸出圖像到瀏覽器。
- 參數
command
要執行的命令。
return_var
如果提供 return_var 參數, Unix 命令的返回狀態會被記錄到此參數。 - 返回值
沒有返回值。 - 例:
三、exec()函數
(PHP 4, PHP 5, PHP 7)
- 介紹:執行一個外部程序
- 說明
- 參數
command
要執行的命令。
output
如果提供了 output 參數,那么會用命令執行的輸出填充此數組,每行輸出填充數組中的一個元素。數組中的數據不包含行尾的空白字符,例如 \n 字符。請注意,如果數組中已經包含了部分元素,exec() 函數會在數組末尾追加內容。如果你不想在數組末尾進行追加,請在傳入 exec() 函數之前對數組使用 unset() 函數進行重置。
return_var
如果同時提供 output 和 return_var 參數,命令執行后的返回狀態會被寫入到此變量。 - 返回值
命令執行結果的最后一行內容。如果你需要獲取未經處理的全部輸出數據,請使用 passthru() 函數。
如果想要獲取命令的輸出內容,請確保使用 output 參數。 - 總結:執行系統命令,但它并不會自己輸出,需要配合echo/print例:
四、shell_exec
(PHP 4, PHP 5, PHP 7)
- 介紹:通過 shell 環境執行命令,并且將完整的輸出以字符串的方式返回。
- 說明
- 參數
cmd
要執行的命令。 - 返回值
命令執行的輸出。如果執行過程中發生錯誤或者進程不產生輸出,則返回 NULL。 - Note
當進程執行過程中發生錯誤,或者進程不產生輸出的情況下,都會返回 NULL,所以,使用本函數無法通過返回值檢測進程是否成功執行。如果需要檢查進程執行的退出碼,請使用 exec() 函數。 - 總結:該函數也可執行系統命令,同exec()函數一樣,需要使用配合echo/print來輸出顯示內容
五、反撇號:`
與shell_exec函數的功能相同。
shell_exec其實是它的變體,使用方法和shell_exec一樣,例:
六、區別比較
(1)system與passthru的區別
passthru可以輸出二進制數據,例如圖像數據
(2)exec與shell_exec的區別
exec只能將獲取的數據返回其中最后一行數據,而shell_exec可以將獲取的數據全部返回
例:
注:輸出和返回值是不同的,返回值是保存在內存中,需要使用echo/print來輸出才可,這樣就可以理解例如system函數為什么執行系統命令后,輸出命令的結果,卻不是輸出它的返回值(也就是他所說的最后一行數據)
舉個例子就懂了,比較下方兩個代碼的輸出即可理解,例:
與
<?php echo system('whoami'); ?>你也可以使用ipconfig或ifconfig來對比,看最后兩行即可
總結
以上是生活随笔為你收集整理的php外部系统命令执行函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 妈妈的小花园作文500
- 下一篇: phpstudy+dvwa搭建