php 執行shell命令的函式

2021-06-18 19:09:28 字數 1960 閱讀 3979

php的內建函式exec,system都可以呼叫系統命令(shell命令),當然還有passthru,escapeshellcmd等函式。

在很多時候利用php的exec,system等函式呼叫系統命令可以幫助我們更好更快的完成工作。比如前二天筆者在批量處理.rar檔案時exec就幫我了大忙了。

今天整理一下常用的呼叫系統函式發出來和大家分享經驗。

注意:要想使用這二個函式php.ini中的安全模式必須關閉,要不然為了安全起見php是不讓呼叫系統命令的。

先看一下php手冊對這二個函式的解釋:

exec --- 執行外部程式

語法 : string exec ( string command [, array &output [, int &return_var]] )

說明 :

exec( )執行給予的命令command,不過它並不會輸出任何東西,它簡單的從命令的結果中傳回最後一行,如果你需要去執行乙個命令,並且從命令去取得所有資料時,可以使用passthru( )這個函式。

如果有給予引數array,則指定的陣列將會被命令所輸出的每一行填滿,注意 : 如果陣列先前已經包含了一些元素的話,exec( )將會把它附加在陣列的後面,如果你不想要此函式附加元素的話,你可以在傳遞此陣列給exec( )之前呼叫unset( )。

如果有給予引數array和return_var,則傳回執行的狀態命令將會寫到這個變數。

注意 : 如果你允許來自使用者輸入的資料,可以傳遞到此函式,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。

注意 : 如果你使用此函式來啟動乙個程式,而且希望在背景裡(background)執行的時候離開它,你必須確定此程式的輸出是轉向(redirected)到乙個檔案或是一些輸出的資料流,否則php將會懸掛(hang)直到程式執行結束。

system --- 執行外部程式並且顯示輸出

語法 : string system ( string command [, int &return_var] )

說明 :

system( )執行給予的命令command,並且輸出結果。如果有給予引數return_var,則執行命令的狀態碼將會寫到這個變數。

注意 : 如果你允許來自使用者輸入的資料,可以傳遞到此函式,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。

注意 : 如果你使用此函式來啟動乙個程式,而且希望在背景裡(background)執行的時候離開它,你必須確定此程式的輸出是轉向(redirected)到乙個檔案或是一些輸出的資料流,否則php將會懸掛(hang)直到程式執行結束。

如果php是運作成伺服器模組,在輸出每一行後,system( )會試著自動地清除web伺服器的輸出緩衝。

成功則傳回命令的最後一行,失敗則傳回false。

如果你需要去執行乙個命令,並且從命令去取得所有資料時,可以使用passthru( )這個函式。

這二個都是用來呼叫系統shell命令,

不同點:

exec可以把執行的結果全部返回到$output函式裡(陣列),$status是執行的狀態 0為成功 1為失敗

systerm不需要提供$output函式,他是直接把結果返回出來,同樣$return_var是執行的狀態碼 0為成功 1為失敗

exec示例:

以下為引用的內容: 

<?php 

$a = exec("dir",$out,$status); 

print_r($a); 

print_r($out); 

print_r($status); 

?> 

system示例:

以下為引用的內容:   

<?php  $a = system("dir",$out);  

print_r($a);   

print_r($out);   

?>

**:

用PHP執行shell命令

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

PHP命令執行函式

window dos命令 批處理命令 linux shell基本命令 php函式執行這些命令事例!環境win7 system exec passthru shell exec windows命令 ipconfig 1.system函式 執行window命令,得到結果一樣。echo system ip...

php 執行系統命令函式

目錄 命令注入 system 函式 passthru 函式 exec shell exec 函式 反引號 popen 函式 pcntl exec 函式 命令注入 command injection 對一些函式的引數沒有做過濾或過濾不嚴導致的,可以執行系統或者應用指令 cmd命令或者bash命令 的一...