PHP 在 exec() 函数上的危险回报



这个函数什么都不产生,有人知道为什么吗?

var_dump(shell_exec('netstat /?'));

exec(( 版本也有同样的问题。

但是这段代码效果很好

var_dump(shell_exec('dir /?));

尝试将-n标志添加到命令中:

var_dump(shell_exec('netstat -n'));

更好的是,使用exec()您还可以将命令的输出分配给数组:

exec('netstat -n', $output);
var_dump($output);

请参阅 https://www.php.net/manual/en/function.exec.php

带有/?开关的netstat不会在标准输出(stdout(中打印,而是在标准错误(stderr(中打印。由于您的PHP代码没有进行任何安排来捕获stderr,因此您只能获得(空(标准输出。如果你从命令行运行PHP,你无论如何都应该看到stderr,但是如果你通过Web服务器运行PHP(我认为这里是这种情况(,那么stderr将被丢弃。但是,仅凭这一点并不能解释空白输出,因为 shell_exec(( 返回(强调我的(:

已执行命令的输出,如果发生错误或命令不生成输出,则NULL

无论如何,如果您不想摆弄管道,您可以将 stderr 重定向到 stdout:

var_dump(shell_exec('netstat /? 2>&1'));

最新更新