gpt4 book ai didi

php - 如何从 PHP 命令行捕获 stderr

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:41 24 4
gpt4 key购买 nike

我想创建一个 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中读取错误并显示在网页上。
  • 如果没有错误,则在输入文件上执行代码并显示执行时间,如果时间超过特定值,则显示超出时间限制的错误。

我在网上搜索了一下,发现if compilation statement appended by "2>&1"as

$a=shell_exec('gcc -o Compile Compile.c 2>&1');

然后编译错误的输出被返回给分配的变量(在上面的例子中是$a),但不是没有它。所以我的问题是如何检查错误,然后在不附加“2>&1”的情况下将其显示在网页上,如果没有错误,则执行上面给出的第二步。

最佳答案

proc_open() 的正确用法应该是这样的:

$process = proc_open('gcc -o Compile Compile.c', array(
0 => array('pipe', 'r'), // STDIN
1 => array('pipe', 'w'), // STDOUT
2 => array('pipe', 'w') // STDERR
), $pipes);

if(is_resource($process)) {
// If you want to write to STDIN
fwrite($pipes[0], '...');
fclose($pipes[0]);

$stdOut = stream_get_contents($pipes[1]);
fclose($pipes[1]);

$stdErr = stream_get_contents($pipes[2]);
fclose($pipes[2]);

$returnCode = proc_close($process);
}

这将执行 shell 命令并让您详细控制 STDIN、STDOUT 和 STDERR。

关于php - 如何从 PHP 命令行捕获 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com