繁体   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