php - 从 php system() 函数获取完整输出

标签 php c++ cmd

我的 php system() 函数输出有问题。代码如下:

system("c:\\Dev-Cpp\\bin\\g++.exe c:\\wamp\\www\\hello.cpp -O3 -o c:\\wamp\\www\\hello.exe", $output);

echo $output;

因此,如果我的 hello.cpp 编译成功,我得到 0,如果没有编译,我得到 1。

如果我从 CMD 运行相同的东西而不是只给出 1,它会给我完整的错误。

如何获取 php system() 函数的完整错误?

最佳答案

您只捕获程序的返回代码,它通常是一个整数,其中 0 表示“成功”,其他任何内容都是错误代码。

如果您想捕获程序的实际输出(即 STDOUT and/or STDERR),您需要执行以下操作之一:

  • 使用输出缓冲来捕获system()的输出:
$command = "c:\\Dev-Cpp\\bin\\g++.exe c:\\wamp\\www\\hello.cpp -O3 -o c:\\wamp\\www\\hello.exe";
ob_start();
system($command, $returnCode);
$output = ob_get_clean();
exec($command, $output, $returnCode);
// ...or...
$output = shell_exec($command);
// ...or...
$output = `$command`;

如果您想捕获 STDERR 的输出(我怀疑您这样做),您可能需要将 2>&1 添加到命令字符串的末尾。

或者,您可能想查看 proc_open() ,这更复杂,但可以让您更精细地控制子进程以及它如何执行/将数据传回给您。

关于php - 从 php system() 函数获取完整输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352636/

相关文章:

php - 检查字符串是否为逗号分隔的数字列表

php - 字符串 ('A=0) 附加到 HTTP GET URL

android - Openssl 结果在 Windows 的 cmd 和 power shell 中不匹配

windows - 在文本文件中查找和替换字符串

windows - 如何在不忽略相邻命令的情况下在命令行中可靠地使用 `rem`?

javascript - 如果在该 div 中选择了所有子复选框,则选中/取消选中(全选复选框)

javascript - Ajax方法submit()不起作用

c++ - 如何通过函数返回 "DELETE"char * 变量?

c++ - double 和 peridoc 小数

c++ - Coverity 中溢出的返回值警告