【问题标题】:Php system() / exec() don't return outputphp system() / exec() 不返回输出
【发布时间】:2011-08-01 22:30:06
【问题描述】:

对于像 'ls' 这样的常用命令,exec() 可以正常工作,例如:

exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0

但是当试图执行另一个程序时,我无法得到输出:

exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0

该命令在直接从命令行执行时会打印一些行。 由于结果(更新了一些文件、添加了数据等),我知道命令已经成功,但我看不到输出。

有什么想法吗?

【问题讨论】:

  • 您发出的命令是否实际打印任何输出?
  • 直接从命令行执行时会这样做。我的意思是我可以看到一些文本行出现在屏幕上。也许有不同类型的输出?
  • 请问您正在运行的实际命令是什么?
  • 只是我下载的一个程序,不是linux的东西

标签: php command-line exec


【解决方案1】:

听起来程序将其警告输出到标准错误而不是标准输出。 exec 只会捕获标准输出。我不确定标准错误是否总是发送到 apache 错误日志,但似乎很有可能。

如果您不需要与非*nix 系统兼容,您可以通过将2>&1 附加到命令来将标准错误重定向到标准输出:

exec('some_command --option 2>&1', $output, $ret);

这应该使您的 php 程序可以使用警告并防止不必要的日志记录。

【讨论】:

  • add 2>&1 但输出仍然是数组空,如果从 cmd 执行,它输出2个值
  • 嗯,可能是该命令仅在其输出定向到终端时才输出。你想做什么?
【解决方案2】:

由于某些*原因,当应用程序发现警告(内部的东西,甚至不是致命的)时,所有输出都被发送到 httpd/error_log

我的解决方案:当没有输出时,假设它失败了。 我的 apache 日志会变脏,但无论如何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多