exec — 執行一個外部程序
string exec ( string $command [, array $output [, int $return_var ]] )
范例
?php echo exec( ls ,$output); echo /br print_r($file);?
執行結果:
test.php
Array( [0] = index.php [1] = test.php)
分析:
exec 不會主動返回執行結果,且只是返回結果的最后一行;
想要獲得完整的結果,需要第二個參數,讓其輸出到指定的數組,此數組一個記錄代表輸出的一行,而且反復執行不同的系統外部命令時,在輸出每一條系統外部命令結果時清理unset()這數組,以防混亂;
第三個參數用來取得命令執行的狀態碼,通常執行成功都是返回0。
passthru — 執行外部程序并且顯示原始輸出
void passthru ( string $command [, int $return_var ] )
范例
?php passthru( ls ?
執行結果:
index.phptest.php
分析:
同 exec() 函數類似,也是用來執行外部命令,但直接將結果輸出到瀏覽器(未經任何處理的 原始輸出),沒有返回值;
當需要輸出二進制數據,并且需要直接傳送到瀏覽器的時候,來使用這函數,如:直接輸出圖像流的命令;
system — 執行外部程序,并且顯示輸出
string system ( string $command [, int $return_var ] )
?php system( ls , $retval);?
分析:
直接將結果輸出到瀏覽器;
第二個參數是外部命令執行后的返回狀態;
成功則返回命令輸出的最后一行,失敗則返回 FALSE;
如果 PHP 運行在服務器模塊中,system() 函數還會嘗試在每行輸出完畢之后, 自動刷新 web 服務器的輸出緩存。
shell_exec — 通過 shell 環境執行命令,并且將完整的輸出以字符串的方式返回。
說明
string shell_exec ( string $cmd )
反引號運算符“`”的效果與函數 shell_exec() 相同。
shell_exec 的返回值
當進程執行過程中發生錯誤,或者進程不產生輸出的情況下,都會返回 NULL, 所以,使用本函數無法通過返回值檢測進程是否成功執行。 如果需要檢查進程執行的退出碼,請使用 exec() 函數。
范例
?php$output = `ls -al`;echo pre $output /pre ?
注意:
反引號運算符在激活了安全模式或者關閉了 shell_exec() 時是無效的。
與其它某些語言不同,反引號不能在雙引號字符串中使用。
Example #1 shell_exec() 例程
當 PHP 運行在 安全模式 時,不能使用此函數。
?php$output = shell_exec( ls -lart echo pre $output /pre ?
escapeshellarg
說明
string escapeshellarg ( string $arg )
escapeshellarg() 將給字符串增加一個單引號并且能引用或者轉碼任何已經存在的單引號,這樣以確保能夠直接將一個字符串傳入 shell 函數,并且還是確保安全的。對于用戶輸入的部分參數就應該使用這個函數。shell 函數包含 exec(), system() 執行運算符 。
參數
arg
需要被轉碼的參數。
返回值
轉換之后字符串。
范例
?phpsystem( ls .escapeshellarg($dir));?
escapeshellcmd
說明
string escapeshellcmd ( string $command )
escapeshellcmd() 對字符串中可能會欺騙 shell 命令執行任意命令的字符進行轉義。 此函數保證用戶輸入的數據在傳送到 exec() 或 system() 函數,或者 執行操作符 之前進行轉義。
反斜線(/)會在以下字符之前插入: `|*?~ ^()[]{}$/, /x0A 和 /xFF。 和 僅在不配對兒的時候被轉義。 在 Windows 平臺上,所有這些字符以及 % 和 ! 字符都會被空格代替。
參數
command
要轉義的命令。
返回值
轉義后的字符串。
范例
?php// 我們故意允許任意數量的參數$command = ./configure .$_POST[ configure_options $escaped_command = escapeshellcmd($command);system($escaped_command);?
Warning
escapeshellcmd() 應被用在完整的命令字符串上。 即使如此,攻擊者還是可以傳入任意數量的參數。 請使用 escapeshellarg() 函數 對單個參數進行轉義。
相關文章推薦:
php中_get方法和_set方法訪問方法的實例代碼
php實現操作文件的各種方式總結(附代碼)
以上就是PHP系統程序執行函數(system,passthru,exec)簡單分析(附代碼)的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答