簡體   English   中英

使用PHP執行unix shell命令

[英]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流數據送入過程,並讀取主要和明顯的優勢, stdoutstderr 這是其他流程執行功能根本不能很好地完成的事情。

它來自一些樣板代碼的小成本,所以它更冗長一點。 我認為權衡是非常好的。

哦, 從您的用戶運行任意命令可能是您可能想到的最大的安全風險之一,但我現在假設您知道這一點。

你可以開始查看php手冊:

系統程序執行

但是,像sdleihssirhc提到,WATCHOUT,這是非常危險的,你應該允許執行的一切!
如果您仍想這樣做,要獲得shell的輸出,只需使用

EXEC
shell的輸出將在第二個參數中傳遞。

例如:

exec('ls -la', $outputArray);
print_r($outputArray);

使用$output = system($command);

請參閱http://php.net/system ,不要忘記閱讀有關安全性的警告。 如果讓用戶將任何數據傳遞給system() (或exec()等),那就好像他們的服務器上有一個shell。 如果您沒有正確清理傳遞給通過這些函數執行的程序的參數,則同樣適用。

嘗試$output = shell_exec('ls -lart');

doc shell_exec

只要它是一行就可以echoexec的返回值。

像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM