在PHP中使用exec()命令运行Cppcheck时出现问题


Issue running Cppcheck with exec() command in PHP

我正在设计一个web应用程序,它从服务器上传代码并在上面运行cppcheck。我尝试使用exec($command,$output,$status);命令命令为"cppcheck ". $filename;

返回的$output数组只包含第一行,即:

正在检查文件.cpp.

线路

"(错误)在索引10处访问数组"a[10]',这超出了界限。"

显示在httpserver的error.log文件中。它实际上不是命令行错误或php错误,而是cppcheck产生的错误。是因为字符串包含"error",所以它会进入error.log吗?我该如何解决这个问题?

正如@arkascha正确指出的那样,cppcheck的输出必须从stderr流重定向到stdout。

根据手册第2.7章:

很多时候,您会希望将结果保存在一个文件中。可以对管道使用常规壳重定向错误输出到文件。

cppcheck file1.c 2> err.txt

你的电话会是

exec($command.' 2>&1', $output, $status);