使用PHP執行系統外部命令的四種方法

2021-08-27 02:44:09 字數 2878 閱讀 9130

php檔案函式關於如何刪除檔案例項教程中,我提到有兩種方法,一種使用unlink函式刪除檔案,還有一種是通過system函式呼叫系統命令來執行刪除檔案命令,其實除了system函式,php執行命令的方法還有很多種,下面介紹在php**開發中最常用的四種執行命令的方法。

準備工作

出於安全性考慮,在通常情況下虛擬主機、xampp、dedeampz等php執行環境都是禁止呼叫系統外部命令的。所以當你需要使用php執行命令的函式呼叫系統外部命令時,你需要確保php執行環境支援php執行命令的函式。

如果你使用的是xampp、dedeampz,一般預設是禁止執行php執行命令的函式的,你可以在php.ini配置檔案中disable_functions一項中去除你想要使用的函式,然後重啟apache即可。我使用的是dedeampz,所以我去除了exec()、passthru()、system()、shell_exec()這四個函式。php執行環境如何配置

?如果你的php執行環境是自行配置的,預設php.ini配置檔案中是不禁止你呼叫執行外部命令的函式的,當然出於安全考慮,你還是應該禁止呼叫一部分執行系統外部命令的函式,找到disable_functions,配置如下:

disable_functions = exec,system,passthru,shell_exec

即禁止執行這三個函式,每個函式之間以逗號分隔。php.ini如何配置

?如果你使用的是虛擬主機,你需要詢問主機提供方php環境是否支援使用php執行命令的函式。

其他說明

由於我使用的是windows系統,所以例項教程中以呼叫windows系統外部命令為主,如你熟悉linux操作,你不妨在linux系統下嘗試執行linux命令。

php執行命令的四種方法

方法一:使用exec函式執行系統外部命令

原型:function exec(string $command,array[optional] $output,int[optional] $return_value)

1

2

3

4

<?

exec

("dir"

,$output

);print_r

($output

);?>

說明:列出和php執行檔案同級目錄下的所有目錄及檔案資訊。

知識點:exec執行系統外部命令時不會輸出結果,而是返回結果的最後一行,如果你想得到結果你可以使用第二個引數,讓其輸出到指定的陣列,此陣列乙個記錄代表輸出的一行,即如果輸出結果有20行,則這個陣列就有20條記錄,所以如果你需要反覆輸出呼叫不同系統外部命令的結果,你最好在輸出每一條系統外部命令結果時清空這個陣列,以防混亂。第三個引數用來取得命令執行的狀態碼,通常執行成功都是返回0。

方法二:使用system函式執行系統外部命令

原型:function system(string $command,int[optional] $return_value)

1

2

3

<?

system

("dir"

);?>

知識點:system和exec的區別在於system在執行系統外部命令時,直接將結果輸出到遊覽器,如果執行命令成功則返回true,否則返回false。第二個引數與exec第三個引數含義一樣。

方法三:使用函式passthru執行系統外部命令

原型:function passthru(string $command,int[optional] $return_value)

知識點:passthru與system的區別,passthru直接將結果輸出到遊覽器,不返回任何值,且其可以輸出二進位制,比如影象資料。

方法四:反撇號`(和~在同乙個鍵)執行系統外部命令1

2

3

<?

echo

` dir

` ;

?>

知識點:在使用這種方法執行系統外部命令時,你要確保shell_exec函式可用,否則是無法使用這種反撇號執行系統外部命令的。

安全性說明

當你使用這些函式執行命令時,如果是根據使用者提交資料作為執行命令的話,你需要考慮系統安全性,可以使用escapeshellcmd()和escapeshellarg()函式阻止使用者惡意在系統上執行命令,escapeshellcmd()針對的是執行的系統命令,而escapeshellarg()針對的是執行系統命令的引數。這兩個引數有點類似addslashes()的功能。

其他說明

當執行命令的返回結果非常龐大時,可以需要考慮將返回結果輸出至其他檔案,再另行讀取檔案

,這樣可以顯著提高程式執行的效率。即

1

2

3

<?

system

("dir > leapsoulcn.txt"

);?>

說明:這裡system執行命令時並不將結果直接輸出至遊覽器而是輸出至指定目錄下的檔案中,顯著提高了程式執行的效率。

至此php執行命令最常用的四種方法exec()、passthru()、system()、shell_exec()及它們之間的區別就介紹完了,在php**開發中根據情況合理利用這些函式執行系統外部命令是非常有用的。

PHP中執行系統外部命令

php作為一種伺服器端的指令碼語言,象編寫簡單,或者是複雜的動態網頁這樣的任務,它完全能夠勝任。但事情不總是如此,有時為了實現某個功能,必須借助於作業系統的外部程式 或者稱之為命令 這樣可以做到事半功倍。那麼,是否可以在php指令碼中呼叫外部命令呢?如果能,如何去做呢?有些什麼方面的顧慮呢?相信你看...

PHP 中執行系統外部命令

php作為一種伺服器端的指令碼語言,象編寫簡單,或者是複雜的動態網頁這樣的任務,它完全能夠勝任。但事情不總是如此,有時為了實現某個功能,必須借助於作業系統的外部程式 或者稱之為命令 這樣可以做到事半功倍。那麼,是否可以在php指令碼中呼叫外部命令呢?如果能,如何去做呢?有些什麼方面的顧慮呢?相信你看...

php執行外部命令

php執行外部命令的不少,例如 exec shell exec system popen等。我特意的講一下popen,它跟其他函式不太一樣,其他函式執行乙個命令後,會等待其返回後,再向下執行,而popen則不會。所以你想用php程式並行的處理一些業務的時候,可以用popen。我舉個例子,有兩個php...