将使用文本框捕获命令。我被告知我必须使用exec()
函数来执行UNIX shell命令。
像这样,用户在文本框中输入ls。 exec()
函数将执行UNIX命令,命令将显示在网页上。
我想知道如何使用PHP获取shell命令的输出并在Web浏览器中显示。
我不知道从哪里开始,因为我对PHP很新。
我正在使用Ubuntu。
答案 0 :(得分:12)
exec
?
system
?
shell_exec
?
passthru
?
反引号?
Pfah!
真正的开发人员使用proc_open
!它具有以下主要和独特的优势:为您提供三个PHP流以将数据提供给流程,并读取 stdout
和stderr
。这是其他流程执行功能根本无法做好的事情。
它来自一些样板代码的小成本,所以它更冗长一点。我认为这种权衡非常好。
哦,并且从您的用户那里运行任意命令可能是您可能想到的最大的安全风险之一,但我现在假设您知道这一点。
答案 1 :(得分:10)
你可以开始查看php手册:
但是像sdleihssirhc提到的那样,注意这是非常危险的,你应该不允许一切都被执行!
如果您仍想这样做,要获得shell的输出,只需使用
exec
shell的输出将在第二个参数中传递。
E.g:
exec('ls -la', $outputArray);
print_r($outputArray);
答案 2 :(得分:4)
使用$output = system($command);
请参阅http://php.net/system,不要忘记阅读有关安全性的警告。如果您让用户将任何数据传递到system()
(或exec()
等),那就好像他们的服务器上有一个shell。如果您没有正确清理传递给通过这些函数执行的程序的参数,则同样适用。
答案 3 :(得分:3)
尝试$output = shell_exec('ls -lart');
doc shell_exec
答案 4 :(得分:2)
只要它是一行,您就可以echo
exec
的返回值。
像这样:
echo exec('ls');
但它只显示第一行。
答案 5 :(得分:1)
exec(escapeshellarg($userSuppliedInput), $output);
echo $output;
答案 6 :(得分:0)
您可以使用反引号来达到此目的。像:
$output = `command-executable -switches`
此外,某些应用程序将其输出回显到STD_ERR流,因此您可能看不到输出。在linux上,您可以通过将2>&1
附加到命令字符串来将错误输入重定向到“正常”输入。