【发布时间】:2012-08-27 22:17:37
【问题描述】:
我想创建一个 C/C++ 的在线编译器。
到目前为止,我已经开发了以下代码:
<?php
error_reporting(E_ALL);
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
compile();
}
function compile()
{
$a=shell_exec('gcc -o Compile Compile.c');
echo $a;
$b=shell_exec('./Compile');
echo $b;
}
?>
文件 Compile.c 正在上传,然后由 gcc 编译。 我想做的是:
- 编译出错时从stderr读取错误并显示在网页上。
- 如果没有错误,则在输入文件上执行代码并显示执行时间,如果时间超过特定值,则显示超出时间限制错误。
我在网上搜索,发现如果编译语句后附加“2>&1”为
$a=shell_exec('gcc -o Compile Compile.c 2>&1');
然后将编译错误的输出返回给分配的变量(在上面的情况下为$a),但不是没有它。所以我的问题是如何检查错误然后将其显示在网页上而不附加“2>&1”,如果没有错误,则执行上面给出的第二步。
【问题讨论】:
-
如果它适用于
2>&1,你为什么不直接使用它呢? -
如果我使用2>&1,我将无法知道它是否是错误的。
-
当您需要更好地控制进程时使用 proc_open:stackoverflow.com/questions/2320608/php-stderr-after-exec。
-
proc_open() 是否执行 shell 命令?我尝试使用 proc_open() 编译 c,但它没有正确响应。也许我使用了一些错误的论点。
标签: php c compiler-construction