Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';s执行运算符不显示g++;错误_Php - Fatal编程技术网

PHP';s执行运算符不显示g++;错误

PHP';s执行运算符不显示g++;错误,php,Php,我正在为我的网站制作一个代码编辑器,它应该获取用户的代码,编译并运行它,通过将代码的输出与正确的预先确定的输出进行匹配,给用户一个成功或失败的机会 假设我有一个文件editor.php: 这将在网页上完美地显示我的目录内容: Volume in drive C is OS Volume Serial Number is D239-CB9C Directory of C:\Users\Chander Shekhar\OneDrive\Documents\Projects\PHPProject

我正在为我的网站制作一个代码编辑器,它应该获取用户的代码,编译并运行它,通过将代码的输出与正确的预先确定的输出进行匹配,给用户一个成功或失败的机会


假设我有一个文件
editor.php


这将在网页上完美地显示我的目录内容:

Volume in drive C is OS Volume Serial Number is D239-CB9C Directory of C:\Users\Chander Shekhar\OneDrive\Documents\Projects\PHPProject\AlgoLand\campaign\code 05/03/2020 07:35 PM
. 05/03/2020 07:35 PM
.. 03/15/2020 09:45 PM 4,068 color-mode.png 05/03/2020 07:06 PM 4,060 editor.css 05/03/2020 04:49 PM 3,709 editor.js 05/03/2020 07:35 PM 19 editor.php 05/03/2020 07:04 PM 2,415 l1q1.php 05/03/2020 07:34 PM 86 sample.cpp 6 File(s) 14,357 bytes 2 Dir(s) 242,218,971,136 bytes free
以更可读的形式(注意sample.cpp):

应输出:

C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
在命令行编译时。有什么好处


我还可以运行其他程序。
如果我将
sample.cpp
更改为:

#include <iostream>

int main(){
    std::cout << "Hello World!";
    return 0;
}
<?php echo `sample.exe` ?>
这将提供适当的输出:

Hello World!

编译器可能在
stderr
上提供输出,而不是
stdout
。背景符号为
stdout
。您需要对管道使用
proc\u open
,正如您在第一个示例中所看到的那样,在询问之后,我终于找到了解决此问题的另一种方法

问题是,如上所述,
@Derick
,g++正在输出到
stderr
。因此,解决方案是将此输出重定向到
stdout

这可以通过在命令末尾追加命令来完成,如下所示:

<?php echo `g++ -std=c++14 sample.cpp -o sample.exe 2>&1` ?>

此命令告诉shell:

1) 取
g++

2) 重定向它(>)
3) 到
stdout
(&1)的文件描述符

因此,输出在适当的通道上传输,并由执行操作符接收

Hello World!
<?php echo `g++ -std=c++14 sample.cpp -o sample.exe 2>&1` ?>