PHP:运行命令并捕获变量中的所有原始输出,而不输出任何内容

问题描述 投票:0回答:1

我熟悉system()passthru()exec()之类的PHP命令,但现在我想执行命令并在php变量中获取原始输出。不向PHP自己的输出发送任何内容,例如从调用我的脚本的浏览器或CLI。

system()passthru()似乎会将命令的输出转发到PHP自己的输出,并且exec()接受用于文本输出的数组。但是我目前正在处理二进制输出(图像数据)。

我能得到的最接近的是这个:

function Execute($command)
{
  ob_start();
  passthru($command);
  $raw = ob_get_contents();
  ob_end_clean();
  return $raw;
}

哪个做到了。但是对我来说似乎有点破烂。是否没有本机或直接方法来执行命令并捕获输出,而不是直接将输出转发到我的PHP脚本自己的输出?

(仅供参考:我在macOS 10.15 Catalina上使用的是PHP 7.3,但在Linux环境中会类似)

php shell command output php-7
1个回答
0
投票

您是否希望$ command产生二进制输出?如果没有,那么您可以执行以下操作:

function Execute($command) {
    $output = [];
    exec($command, $output);
    return implode(PHP_EOL, $output);
}

对于二进制输出,passthru最好。

© www.soinside.com 2019 - 2024. All rights reserved.