【问题标题】:PHP exec doesn't return outputPHP exec不返回输出
【发布时间】:2023-03-09 11:15:01
【问题描述】:

我有一个程序,它必须从 cmd.exe 运行并提供一些参数。该命令如下所示:

query.exe USERNAME PASSWORD WMI_QUERY MACHINE

这个程序运行良好。但是当我尝试使用以下代码从 PHP 运行它时:

function execute_query($ip, $username, $password, $query){

    $runCMD ="query.exe " . $username . " " . $password .  ' "' .$query . '" '  . $ip;
    echo exec($runCMD);
    print_r ($stdout);
}

我没有得到任何输出。它说进程成功终止,但没有别的,尽管程序运行并成功返回输出。我在 php 7.1 中使用 windows 和 XAMPP 我厌倦了使用 shell_exec,但没有任何运气。还有其他想法吗?

【问题讨论】:

  • exec() 为终端中的每一行输出返回一个数组中的输出。 iirc shell_exec 不返回任何内容。检查通过引用传递的数组参数 - php.net/manual/en/function.exec.php
  • $stdout 也没有定义
  • 哎呀,忽略我的第一条评论,我不知道为什么我认为 shell_exec 没有返回任何东西,但 $stdout 仍然没有定义
  • 你实际上并没有执行你的$runCMD
  • 它没有运行 $runCMD 因为我正在测试。我尝试创建 var $output = [] 并将其设置为第二个参数,但当我打印它时它是空的。

标签: php windows exec


【解决方案1】:

我通常只是简单地使用:

passthru("the_command 2>&1");

2>&1 位是将 STDERR 重定向到 STDOUT,当命令失败时,这可能是您的输出位置...

【讨论】:

  • 另外,要捕获输出,您可以使用 ob_start() 和 ob_get_contents()
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多