[英]Executing unix shell commands using PHP
將使用文本框捕獲命令。 我被告知我必須使用exec()
函數來執行UNIX shell命令。
像這樣的東西,用戶在文本框中輸入ls。 exec()
函數將執行UNIX命令,命令將顯示在網頁上。
我想知道如何使用PHP獲取shell命令的輸出並在Web瀏覽器中顯示。
我不知道從哪里開始,因為我對PHP很新。
我正在使用Ubuntu。
exec
?
system
?
shell_exec
?
passthru
?
反引號?
Pfah!
真正的開發人員使用proc_open
! 它有讓你們三個PHP流數據送入過程,並讀取主要和明顯的優勢, stdout
和stderr
。 這是其他流程執行功能根本不能很好地完成的事情。
它來自一些樣板代碼的小成本,所以它更冗長一點。 我認為權衡是非常好的。
哦, 從您的用戶運行任意命令可能是您可能想到的最大的安全風險之一,但我現在假設您知道這一點。
使用$output = system($command);
請參閱http://php.net/system ,不要忘記閱讀有關安全性的警告。 如果讓用戶將任何數據傳遞給system()
(或exec()
等),那就好像他們的服務器上有一個shell。 如果您沒有正確清理傳遞給通過這些函數執行的程序的參數,則同樣適用。
嘗試$output = shell_exec('ls -lart');
doc shell_exec
只要它是一行就可以echo
顯exec
的返回值。
像這樣:
echo exec('ls');
但它只顯示第一行。
exec(escapeshellarg($userSuppliedInput), $output);
echo $output;
您可以使用反引號來實現此目的。 喜歡:
$output = `command-executable -switches`
此外,某些應用程序將其輸出回顯到STD_ERR流,因此您可能看不到輸出。 在linux上,您可以通過在命令字符串中附加2>&1
將錯誤輸入重定向到“正常”輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.