debian环境$output中的php exec()包含整个shell历史记录

debian环境$output中的php exec()包含整个shell历史记录,php,debian,exec,debian-based,Php,Debian,Exec,Debian Based,我在循环中运行一个简单的命令 命令本身是ffmpeg,但我不相信它与这个问题有关 因此,我: exec($exec.' 2>&1', $output, $return); if($return) { foreach($output as $line) { file_put_contents($log_file, $line, FILE_APPEND); } } 这样,如果命令出错,我可以读取日志中的输出。它可以工作,但是$output包含命令的

我在循环中运行一个简单的命令 命令本身是ffmpeg,但我不相信它与这个问题有关 因此,我:

exec($exec.' 2>&1', $output, $return);
if($return)
{
    foreach($output as $line)
    {
      file_put_contents($log_file, $line, FILE_APPEND);
    }
}
这样,如果命令出错,我可以读取日志中的输出。它可以工作,但是$output包含命令的整个shell历史记录。澄清一下:每次发生错误时,特定命令生成的所有输出(包括一天中数百次成功执行)都会转储到文件中。应该写入的5行错误是整个1000+行历史记录。我在CentOS上使用了完全相同的代码,它只提供了由最近执行的实例生成的输出的预期输出。

来自:

请注意,如果数组已经包含一些元素,exec()将附加到数组的末尾。如果不希望函数附加元素,请在将其传递给exec()之前对数组调用unset()


我无法解释为什么它在CentOS上的工作方式不同。

unset($output);工作得很好。谢谢我猜CentOS在每次调用exec()时都会清除$output。我不知道操作系统如何做到这一点,这是PHP的一部分。也许这是一个旧版本的PHP,尽管文档中没有版本注释说它已经改变了。