Php 在联机c编译器中显示错误

Php 在联机c编译器中显示错误,php,c,compiler-errors,Php,C,Compiler Errors,嗨,我有一个c编译器,运行时显示输出,但问题是它没有显示错误 shell_exec("gcc xyz.c -o ab.out "); $output=exec("./ab.out"); echo $output; 因此,它显示输出,但不显示编译时发生的任何错误。 如有任何帮助,我们将不胜感激。 提前感谢。您运行的命令的任何错误输出都将转到STDERR,并且exec、shell_exec函数都不会为您提供此功能。一种方法是重定向它 exec("gcc tes

嗨,我有一个c编译器,运行时显示输出,但问题是它没有显示错误

      shell_exec("gcc xyz.c -o ab.out ");

      $output=exec("./ab.out");
      echo $output;
因此,它显示输出,但不显示编译时发生的任何错误。 如有任何帮助,我们将不胜感激。
提前感谢。

您运行的命令的任何错误输出都将转到STDERR,并且exec、shell_exec函数都不会为您提供此功能。一种方法是重定向它

exec("gcc test.c 2>&1", $out);
最干净的方法是使用函数

$descriptorspec = array(
   1 => array("pipe", "w"),  // stdout
   2 => array("pipe", "w") // stderr 
);

$process = proc_open('gcc test.c', $descriptorspec, $pipes);

if (is_resource($process)) {
    $stderr = stream_get_contents($pipes[2]);
    $stdout = stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    $return_value = proc_close($process);
}

您运行的命令的任何错误输出都将转到STDERR,并且exec、shell_exec函数都不会为您提供这一信息。一种方法是重定向它

exec("gcc test.c 2>&1", $out);
最干净的方法是使用函数

$descriptorspec = array(
   1 => array("pipe", "w"),  // stdout
   2 => array("pipe", "w") // stderr 
);

$process = proc_open('gcc test.c', $descriptorspec, $pipes);

if (is_resource($process)) {
    $stderr = stream_get_contents($pipes[2]);
    $stdout = stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    $return_value = proc_close($process);
}

另外,
exec
的返回值只是命令结果的最后一行。而且,
exec
的返回值只是命令结果的最后一行。它是否会重定向到.out文件?是的。如果你用那种方式<代码>执行(“gcc测试>out.log 2>&1”)。请参阅高级示例中的
proc\u open
它是否会重定向到.out文件?是。如果你用那种方式<代码>执行(“gcc测试>out.log 2>&1”)。请参阅带有
proc\u open