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